iso_20022_tsrv/
tsrv_002_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 COUNTRY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{2,2}"#).unwrap();
25}
26
27::lazy_static::lazy_static! {
28    static ref MAX_2_MB_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
29}
30
31::lazy_static::lazy_static! {
32    static ref ISO_2_A_LANGUAGE_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[a-z]{2,2}"#).unwrap();
33}
34
35::lazy_static::lazy_static! {
36    static ref ANY_BIC_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"#).unwrap();
37}
38
39::lazy_static::lazy_static! {
40    static ref PHONE_NUMBER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"\+[0-9]{1,3}-[0-9()+\-]{1,30}"#).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/// Returns the namespace of the schema
48pub fn namespace() -> String {
49    "urn:iso:std:iso:20022:tech:xsd:tsrv.002.001.01".to_string()
50}
51
52#[derive(
53    Debug,
54    Default,
55    Clone,
56    PartialEq,
57    ::serde::Serialize,
58    ::serde::Deserialize,
59    ::derive_builder::Builder,
60    ::validator::Validate,
61)]
62pub struct Max35Text {
63    #[validate(length(min = 1, max = 35,))]
64    #[serde(rename = "$text")]
65    pub value: String,
66}
67#[derive(
68    Debug,
69    Default,
70    Clone,
71    PartialEq,
72    ::serde::Serialize,
73    ::serde::Deserialize,
74    ::derive_builder::Builder,
75    ::validator::Validate,
76)]
77pub struct AmountOrPercentage1ChoiceEnum {
78    #[serde(rename = "DfndAmt", skip_serializing_if = "Option::is_none")]
79    pub dfnd_amt: Option<UndertakingAmount4>,
80    #[serde(rename = "PctgAmt", skip_serializing_if = "Option::is_none")]
81    pub pctg_amt: Option<Percentage1>,
82}
83#[derive(
84    Debug,
85    Default,
86    Clone,
87    PartialEq,
88    ::serde::Serialize,
89    ::serde::Deserialize,
90    ::derive_builder::Builder,
91    ::validator::Validate,
92)]
93pub struct AmountOrPercentage1Choice {
94    #[serde(flatten)]
95    pub value: AmountOrPercentage1ChoiceEnum,
96}
97#[derive(
98    Debug,
99    Default,
100    Clone,
101    PartialEq,
102    ::serde::Serialize,
103    ::serde::Deserialize,
104    ::derive_builder::Builder,
105    ::validator::Validate,
106)]
107pub struct Party11ChoiceEnum {
108    #[serde(rename = "PrvtId", skip_serializing_if = "Option::is_none")]
109    pub prvt_id: Option<PersonIdentification5>,
110    #[serde(rename = "OrgId", skip_serializing_if = "Option::is_none")]
111    pub org_id: Option<OrganisationIdentification8>,
112}
113#[derive(
114    Debug,
115    Default,
116    Clone,
117    PartialEq,
118    ::serde::Serialize,
119    ::serde::Deserialize,
120    ::derive_builder::Builder,
121    ::validator::Validate,
122)]
123pub struct Party11Choice {
124    #[serde(flatten)]
125    pub value: Party11ChoiceEnum,
126}
127#[derive(
128    Debug,
129    Default,
130    Clone,
131    PartialEq,
132    ::serde::Serialize,
133    ::serde::Deserialize,
134    ::derive_builder::Builder,
135    ::validator::Validate,
136)]
137pub struct PlaceOrUnderConfirmationChoice1Enum {
138    #[serde(rename = "PresntnUdrConf", skip_serializing_if = "Option::is_none")]
139    pub presntn_udr_conf: Option<PresentationParty1Code>,
140    #[serde(rename = "PlcOfPresntn", skip_serializing_if = "Option::is_none")]
141    pub plc_of_presntn: Option<PlaceOfPresentation1>,
142}
143#[derive(
144    Debug,
145    Default,
146    Clone,
147    PartialEq,
148    ::serde::Serialize,
149    ::serde::Deserialize,
150    ::derive_builder::Builder,
151    ::validator::Validate,
152)]
153pub struct PlaceOrUnderConfirmationChoice1 {
154    #[serde(flatten)]
155    pub value: PlaceOrUnderConfirmationChoice1Enum,
156}
157#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
158pub enum UndertakingIssuanceName1Code {
159    #[serde(rename = "STBY")]
160    Stby,
161    #[serde(rename = "DGAR")]
162    Dgar,
163    #[default]
164    Unknown,
165}
166#[derive(
167    Debug,
168    Default,
169    Clone,
170    PartialEq,
171    ::serde::Serialize,
172    ::serde::Deserialize,
173    ::derive_builder::Builder,
174    ::validator::Validate,
175)]
176pub struct Max140Text {
177    #[validate(length(min = 1, max = 140,))]
178    #[serde(rename = "$text")]
179    pub value: String,
180}
181#[derive(
182    Debug,
183    Default,
184    Clone,
185    PartialEq,
186    ::serde::Serialize,
187    ::serde::Deserialize,
188    ::derive_builder::Builder,
189    ::validator::Validate,
190)]
191pub struct DateInformation1 {
192    #[validate]
193    #[serde(rename = "StartDt")]
194    pub start_dt: IsoDate,
195    #[serde(rename = "Frqcy")]
196    pub frqcy: ExternalDateFrequency1Code,
197    #[validate]
198    #[serde(rename = "Nb")]
199    pub nb: Number,
200}
201#[derive(
202    Debug,
203    Default,
204    Clone,
205    PartialEq,
206    ::serde::Serialize,
207    ::serde::Deserialize,
208    ::derive_builder::Builder,
209    ::validator::Validate,
210)]
211pub struct Document9<
212    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
213> {
214    #[serde(rename = "Tp")]
215    pub tp: UndertakingDocumentType1Choice,
216    #[validate]
217    #[serde(rename = "Id")]
218    pub id: Max35Text,
219    #[serde(rename = "Frmt", skip_serializing_if = "Option::is_none")]
220    pub frmt: Option<DocumentFormat1Choice>,
221    #[validate]
222    #[serde(rename = "Nclsr")]
223    pub nclsr: Max2MbBinary,
224    #[serde(rename = "DgtlSgntr", skip_serializing_if = "Option::is_none")]
225    pub dgtl_sgntr: Option<PartyAndSignature2<A>>,
226}
227#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
228pub enum GovernanceIdentification1Code {
229    #[serde(rename = "ISPR")]
230    Ispr,
231    #[serde(rename = "NONE")]
232    None,
233    #[serde(rename = "UCPR")]
234    Ucpr,
235    #[serde(rename = "URDG")]
236    Urdg,
237    #[default]
238    Unknown,
239}
240#[derive(
241    Debug,
242    Default,
243    Clone,
244    PartialEq,
245    ::serde::Serialize,
246    ::serde::Deserialize,
247    ::derive_builder::Builder,
248    ::validator::Validate,
249)]
250pub struct ModelFormIdentification1ChoiceEnum {
251    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
252    pub cd: Option<ExternalModelFormIdentification1Code>,
253    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
254    pub prtry: Option<GenericIdentification1>,
255}
256#[derive(
257    Debug,
258    Default,
259    Clone,
260    PartialEq,
261    ::serde::Serialize,
262    ::serde::Deserialize,
263    ::derive_builder::Builder,
264    ::validator::Validate,
265)]
266pub struct ModelFormIdentification1Choice {
267    #[serde(flatten)]
268    pub value: ModelFormIdentification1ChoiceEnum,
269}
270#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
271pub enum IssuanceType1Code {
272    #[serde(rename = "CRQL")]
273    Crql,
274    #[serde(rename = "CRQC")]
275    Crqc,
276    #[serde(rename = "ISSU")]
277    Issu,
278    #[serde(rename = "ISCO")]
279    Isco,
280    #[serde(rename = "ISAD")]
281    Isad,
282    #[default]
283    Unknown,
284}
285#[derive(
286    Debug,
287    Default,
288    Clone,
289    PartialEq,
290    ::serde::Serialize,
291    ::serde::Deserialize,
292    ::derive_builder::Builder,
293    ::validator::Validate,
294)]
295pub struct NonExtension1 {
296    #[serde(rename = "NtfctnPrd", skip_serializing_if = "Option::is_none")]
297    pub ntfctn_prd: Option<Number>,
298    #[serde(rename = "NtfctnMtd", skip_serializing_if = "Option::is_none")]
299    pub ntfctn_mtd: Option<CommunicationMethod1Choice>,
300    #[serde(rename = "NtfctnRcptTp", skip_serializing_if = "Option::is_none")]
301    pub ntfctn_rcpt_tp: Option<PartyType1Choice>,
302    #[serde(rename = "NtfctnRcptNm", skip_serializing_if = "Option::is_none")]
303    pub ntfctn_rcpt_nm: Option<Max140Text>,
304    #[serde(rename = "NtfctnRcptAdr", skip_serializing_if = "Option::is_none")]
305    pub ntfctn_rcpt_adr: Option<PostalAddress6>,
306}
307#[derive(
308    Debug,
309    Default,
310    Clone,
311    PartialEq,
312    ::serde::Serialize,
313    ::serde::Deserialize,
314    ::derive_builder::Builder,
315    ::validator::Validate,
316)]
317pub struct PartyAndSignature2<
318    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
319> {
320    #[validate]
321    #[serde(rename = "Pty")]
322    pub pty: PartyIdentification43,
323    #[validate]
324    #[serde(rename = "Sgntr")]
325    pub sgntr: ProprietaryData3<A>,
326}
327#[derive(
328    Debug,
329    Default,
330    Clone,
331    PartialEq,
332    ::serde::Serialize,
333    ::serde::Deserialize,
334    ::derive_builder::Builder,
335    ::validator::Validate,
336)]
337pub struct PartyType1ChoiceEnum {
338    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
339    pub cd: Option<ExternalTypeOfParty1Code>,
340    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
341    pub prtry: Option<GenericIdentification1>,
342}
343#[derive(
344    Debug,
345    Default,
346    Clone,
347    PartialEq,
348    ::serde::Serialize,
349    ::serde::Deserialize,
350    ::derive_builder::Builder,
351    ::validator::Validate,
352)]
353pub struct PartyType1Choice {
354    #[serde(flatten)]
355    pub value: PartyType1ChoiceEnum,
356}
357#[derive(
358    Debug,
359    Default,
360    Clone,
361    PartialEq,
362    ::serde::Serialize,
363    ::serde::Deserialize,
364    ::derive_builder::Builder,
365    ::validator::Validate,
366)]
367pub struct Trigger1 {
368    #[serde(rename = "DtChc", skip_serializing_if = "Option::is_none")]
369    pub dt_chc: Option<FixedOrRecurrentDate1Choice>,
370    #[validate(length(min = 0,))]
371    #[serde(rename = "DcmntryEvt", default)]
372    pub dcmntry_evt: Vec<Document10>,
373}
374#[derive(
375    Debug,
376    Default,
377    Clone,
378    PartialEq,
379    ::serde::Serialize,
380    ::serde::Deserialize,
381    ::derive_builder::Builder,
382    ::validator::Validate,
383)]
384pub struct CountryCode {
385    #[validate(regex = "COUNTRY_CODE_REGEX")]
386    #[serde(rename = "$text")]
387    pub value: String,
388}
389#[derive(
390    Debug,
391    Default,
392    Clone,
393    PartialEq,
394    ::serde::Serialize,
395    ::serde::Deserialize,
396    ::derive_builder::Builder,
397    ::validator::Validate,
398)]
399pub struct Max2MbBinary {
400    #[validate(length(min = 1, max = 2097152,), regex = "MAX_2_MB_BINARY_REGEX")]
401    pub value: String,
402}
403#[derive(
404    Debug,
405    Default,
406    Clone,
407    PartialEq,
408    ::serde::Serialize,
409    ::serde::Deserialize,
410    ::derive_builder::Builder,
411    ::validator::Validate,
412)]
413pub struct DateAndPlaceOfBirth {
414    #[validate]
415    #[serde(rename = "BirthDt")]
416    pub birth_dt: IsoDate,
417    #[serde(rename = "PrvcOfBirth", skip_serializing_if = "Option::is_none")]
418    pub prvc_of_birth: Option<Max35Text>,
419    #[validate]
420    #[serde(rename = "CityOfBirth")]
421    pub city_of_birth: Max35Text,
422    #[serde(rename = "CtryOfBirth")]
423    pub ctry_of_birth: CountryCode,
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 GenericOrganisationIdentification1 {
436    #[validate]
437    #[serde(rename = "Id")]
438    pub id: Max35Text,
439    #[serde(rename = "SchmeNm", skip_serializing_if = "Option::is_none")]
440    pub schme_nm: Option<OrganisationIdentificationSchemeName1Choice>,
441    #[serde(rename = "Issr", skip_serializing_if = "Option::is_none")]
442    pub issr: Option<Max35Text>,
443}
444#[derive(
445    Debug,
446    Default,
447    Clone,
448    PartialEq,
449    ::serde::Serialize,
450    ::serde::Deserialize,
451    ::derive_builder::Builder,
452    ::validator::Validate,
453)]
454pub struct GovernanceIdentification1ChoiceEnum {
455    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
456    pub prtry: Option<GenericIdentification1>,
457    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
458    pub cd: Option<GovernanceIdentification1Code>,
459}
460#[derive(
461    Debug,
462    Default,
463    Clone,
464    PartialEq,
465    ::serde::Serialize,
466    ::serde::Deserialize,
467    ::derive_builder::Builder,
468    ::validator::Validate,
469)]
470pub struct GovernanceIdentification1Choice {
471    #[serde(flatten)]
472    pub value: GovernanceIdentification1ChoiceEnum,
473}
474#[derive(
475    Debug,
476    Default,
477    Clone,
478    PartialEq,
479    ::serde::Serialize,
480    ::serde::Deserialize,
481    ::derive_builder::Builder,
482    ::validator::Validate,
483)]
484pub struct GovernanceRules1 {
485    #[serde(rename = "RuleId")]
486    pub rule_id: GovernanceIdentification1Choice,
487    #[serde(rename = "AplblLaw", skip_serializing_if = "Option::is_none")]
488    pub aplbl_law: Option<Location1>,
489    #[validate(length(min = 0,))]
490    #[serde(rename = "Jursdctn", default)]
491    pub jursdctn: Vec<Location1>,
492}
493#[derive(
494    Debug,
495    Default,
496    Clone,
497    PartialEq,
498    ::serde::Serialize,
499    ::serde::Deserialize,
500    ::derive_builder::Builder,
501    ::validator::Validate,
502)]
503pub struct PartyIdentification43 {
504    #[serde(rename = "Nm", skip_serializing_if = "Option::is_none")]
505    pub nm: Option<Max140Text>,
506    #[serde(rename = "PstlAdr", skip_serializing_if = "Option::is_none")]
507    pub pstl_adr: Option<PostalAddress6>,
508    #[serde(rename = "Id", skip_serializing_if = "Option::is_none")]
509    pub id: Option<Party11Choice>,
510    #[serde(rename = "CtryOfRes", skip_serializing_if = "Option::is_none")]
511    pub ctry_of_res: Option<CountryCode>,
512    #[serde(rename = "CtctDtls", skip_serializing_if = "Option::is_none")]
513    pub ctct_dtls: Option<ContactDetails2>,
514}
515#[derive(
516    Debug,
517    Default,
518    Clone,
519    PartialEq,
520    ::serde::Serialize,
521    ::serde::Deserialize,
522    ::derive_builder::Builder,
523    ::validator::Validate,
524)]
525#[serde(rename = "Document")]
526pub struct Document<
527    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
528    B: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
529    C: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
530    D: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
531> {
532    #[serde(rename = "UdrtkgIssncAdvc")]
533    pub udrtkg_issnc_advc: UndertakingIssuanceAdviceV01<A, B, C, D>,
534    #[serde(rename = "@xmlns", default = "namespace")]
535    pub xmlns: String,
536}
537#[derive(
538    Debug,
539    Default,
540    Clone,
541    PartialEq,
542    ::serde::Serialize,
543    ::serde::Deserialize,
544    ::derive_builder::Builder,
545    ::validator::Validate,
546)]
547pub struct ExternalDocumentFormat1Code {
548    #[validate(length(min = 1, max = 4,))]
549    #[serde(rename = "$text")]
550    pub value: String,
551}
552#[derive(
553    Debug,
554    Default,
555    Clone,
556    PartialEq,
557    ::serde::Serialize,
558    ::serde::Deserialize,
559    ::derive_builder::Builder,
560    ::validator::Validate,
561)]
562pub struct IsoDate {
563    #[serde(rename = "$text")]
564    pub value: ::chrono::NaiveDate,
565}
566#[derive(
567    Debug,
568    Default,
569    Clone,
570    PartialEq,
571    ::serde::Serialize,
572    ::serde::Deserialize,
573    ::derive_builder::Builder,
574    ::validator::Validate,
575)]
576pub struct UndertakingAmount4 {
577    #[validate]
578    #[serde(rename = "VartnAmt")]
579    pub vartn_amt: ActiveCurrencyAndAmount,
580    #[serde(rename = "BalAmt", skip_serializing_if = "Option::is_none")]
581    pub bal_amt: Option<ActiveCurrencyAndAmount>,
582}
583#[derive(
584    Debug,
585    Default,
586    Clone,
587    PartialEq,
588    ::serde::Serialize,
589    ::serde::Deserialize,
590    ::derive_builder::Builder,
591    ::validator::Validate,
592)]
593pub struct UndertakingIssuanceAdviceV01<
594    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
595    B: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
596    C: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
597    D: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
598> {
599    #[validate]
600    #[serde(rename = "AdvsgPty")]
601    pub advsg_pty: PartyIdentification43,
602    #[serde(rename = "ScndAdvsgPty", skip_serializing_if = "Option::is_none")]
603    pub scnd_advsg_pty: Option<PartyIdentification43>,
604    #[serde(rename = "DtOfAdvc")]
605    pub dt_of_advc: DateAndDateTimeChoice,
606    #[serde(rename = "UdrtkgIssncAdvcDtls")]
607    pub udrtkg_issnc_advc_dtls: UndertakingAdvice1<A, B, C>,
608    #[validate(length(min = 0, max = 5,))]
609    #[serde(rename = "BkToBkInf", default)]
610    pub bk_to_bk_inf: Vec<Max2000Text>,
611    #[serde(rename = "DgtlSgntr", skip_serializing_if = "Option::is_none")]
612    pub dgtl_sgntr: Option<PartyAndSignature2<D>>,
613}
614#[derive(
615    Debug,
616    Default,
617    Clone,
618    PartialEq,
619    ::serde::Serialize,
620    ::serde::Deserialize,
621    ::derive_builder::Builder,
622    ::validator::Validate,
623)]
624pub struct Channel1ChoiceEnum {
625    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
626    pub cd: Option<ExternalChannel1Code>,
627    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
628    pub prtry: Option<GenericIdentification1>,
629}
630#[derive(
631    Debug,
632    Default,
633    Clone,
634    PartialEq,
635    ::serde::Serialize,
636    ::serde::Deserialize,
637    ::derive_builder::Builder,
638    ::validator::Validate,
639)]
640pub struct Channel1Choice {
641    #[serde(flatten)]
642    pub value: Channel1ChoiceEnum,
643}
644#[derive(
645    Debug,
646    Default,
647    Clone,
648    PartialEq,
649    ::serde::Serialize,
650    ::serde::Deserialize,
651    ::derive_builder::Builder,
652    ::validator::Validate,
653)]
654pub struct ExternalRelativeTo1Code {
655    #[validate(length(min = 1, max = 4,))]
656    #[serde(rename = "$text")]
657    pub value: String,
658}
659#[derive(
660    Debug,
661    Default,
662    Clone,
663    PartialEq,
664    ::serde::Serialize,
665    ::serde::Deserialize,
666    ::derive_builder::Builder,
667    ::validator::Validate,
668)]
669pub struct PresentationDocumentFormat1ChoiceEnum {
670    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
671    pub cd: Option<ExternalUndertakingDocumentType1Code>,
672    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
673    pub prtry: Option<GenericIdentification1>,
674}
675#[derive(
676    Debug,
677    Default,
678    Clone,
679    PartialEq,
680    ::serde::Serialize,
681    ::serde::Deserialize,
682    ::derive_builder::Builder,
683    ::validator::Validate,
684)]
685pub struct PresentationDocumentFormat1Choice {
686    #[serde(flatten)]
687    pub value: PresentationDocumentFormat1ChoiceEnum,
688}
689#[derive(
690    Debug,
691    Default,
692    Clone,
693    PartialEq,
694    ::serde::Serialize,
695    ::serde::Deserialize,
696    ::derive_builder::Builder,
697    ::validator::Validate,
698)]
699pub struct ExternalOrganisationIdentification1Code {
700    #[validate(length(min = 1, max = 4,))]
701    #[serde(rename = "$text")]
702    pub value: String,
703}
704#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
705pub enum UndertakingName1Code {
706    #[serde(rename = "STBY")]
707    Stby,
708    #[serde(rename = "DGAR")]
709    Dgar,
710    #[default]
711    Unknown,
712}
713#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
714pub enum VariationType1Code {
715    #[serde(rename = "DECR")]
716    Decr,
717    #[serde(rename = "INCR")]
718    Incr,
719    #[default]
720    Unknown,
721}
722#[derive(
723    Debug,
724    Default,
725    Clone,
726    PartialEq,
727    ::serde::Serialize,
728    ::serde::Deserialize,
729    ::derive_builder::Builder,
730    ::validator::Validate,
731)]
732pub struct PersonIdentification5 {
733    #[serde(rename = "DtAndPlcOfBirth", skip_serializing_if = "Option::is_none")]
734    pub dt_and_plc_of_birth: Option<DateAndPlaceOfBirth>,
735    #[validate(length(min = 0,))]
736    #[serde(rename = "Othr", default)]
737    pub othr: Vec<GenericPersonIdentification1>,
738}
739#[derive(
740    Debug,
741    Default,
742    Clone,
743    PartialEq,
744    ::serde::Serialize,
745    ::serde::Deserialize,
746    ::derive_builder::Builder,
747    ::validator::Validate,
748)]
749pub struct ExternalDateFrequency1Code {
750    #[validate(length(min = 1, max = 4,))]
751    #[serde(rename = "$text")]
752    pub value: String,
753}
754#[derive(
755    Debug,
756    Default,
757    Clone,
758    PartialEq,
759    ::serde::Serialize,
760    ::serde::Deserialize,
761    ::derive_builder::Builder,
762    ::validator::Validate,
763)]
764pub struct Iso2ALanguageCode {
765    #[validate(regex = "ISO_2_A_LANGUAGE_CODE_REGEX")]
766    #[serde(rename = "$text")]
767    pub value: String,
768}
769#[derive(
770    Debug,
771    Default,
772    Clone,
773    PartialEq,
774    ::serde::Serialize,
775    ::serde::Deserialize,
776    ::derive_builder::Builder,
777    ::validator::Validate,
778)]
779pub struct Presentation1 {
780    #[serde(rename = "Mdm", skip_serializing_if = "Option::is_none")]
781    pub mdm: Option<PresentationMedium1Choice>,
782    #[serde(
783        rename = "PlcOfPresntnOrUdrConfChc",
784        skip_serializing_if = "Option::is_none"
785    )]
786    pub plc_of_presntn_or_udr_conf_chc: Option<PlaceOrUnderConfirmationChoice1>,
787    #[validate(length(min = 0,))]
788    #[serde(rename = "Doc", default)]
789    pub doc: Vec<Document8>,
790    #[validate(length(min = 0, max = 5,))]
791    #[serde(rename = "AddtlInf", default)]
792    pub addtl_inf: Vec<Max2000Text>,
793}
794#[derive(
795    Debug,
796    Default,
797    Clone,
798    PartialEq,
799    ::serde::Serialize,
800    ::serde::Deserialize,
801    ::derive_builder::Builder,
802    ::validator::Validate,
803)]
804pub struct Percentage1 {
805    #[validate]
806    #[serde(rename = "Rate")]
807    pub rate: PercentageRate,
808    #[serde(rename = "RltvTo")]
809    pub rltv_to: ExternalRelativeTo1Code,
810}
811#[derive(
812    Debug,
813    Default,
814    Clone,
815    PartialEq,
816    ::serde::Serialize,
817    ::serde::Deserialize,
818    ::derive_builder::Builder,
819    ::validator::Validate,
820)]
821pub struct GenericPersonIdentification1 {
822    #[validate]
823    #[serde(rename = "Id")]
824    pub id: Max35Text,
825    #[serde(rename = "SchmeNm", skip_serializing_if = "Option::is_none")]
826    pub schme_nm: Option<PersonIdentificationSchemeName1Choice>,
827    #[serde(rename = "Issr", skip_serializing_if = "Option::is_none")]
828    pub issr: Option<Max35Text>,
829}
830#[derive(
831    Debug,
832    Default,
833    Clone,
834    PartialEq,
835    ::serde::Serialize,
836    ::serde::Deserialize,
837    ::derive_builder::Builder,
838    ::validator::Validate,
839)]
840pub struct ContactDetails2 {
841    #[serde(rename = "NmPrfx", skip_serializing_if = "Option::is_none")]
842    pub nm_prfx: Option<NamePrefix1Code>,
843    #[serde(rename = "Nm", skip_serializing_if = "Option::is_none")]
844    pub nm: Option<Max140Text>,
845    #[serde(rename = "PhneNb", skip_serializing_if = "Option::is_none")]
846    pub phne_nb: Option<PhoneNumber>,
847    #[serde(rename = "MobNb", skip_serializing_if = "Option::is_none")]
848    pub mob_nb: Option<PhoneNumber>,
849    #[serde(rename = "FaxNb", skip_serializing_if = "Option::is_none")]
850    pub fax_nb: Option<PhoneNumber>,
851    #[serde(rename = "EmailAdr", skip_serializing_if = "Option::is_none")]
852    pub email_adr: Option<Max2048Text>,
853    #[serde(rename = "Othr", skip_serializing_if = "Option::is_none")]
854    pub othr: Option<Max35Text>,
855}
856#[derive(
857    Debug,
858    Default,
859    Clone,
860    PartialEq,
861    ::serde::Serialize,
862    ::serde::Deserialize,
863    ::derive_builder::Builder,
864    ::validator::Validate,
865)]
866pub struct AutomaticVariation1 {
867    #[validate]
868    #[serde(rename = "Id")]
869    pub id: Max35Text,
870    #[serde(rename = "Tp")]
871    pub tp: VariationType1Code,
872    #[validate(length(min = 1,))]
873    #[serde(rename = "AmtAndTrggr", default)]
874    pub amt_and_trggr: Vec<AmountAndTrigger1>,
875    #[validate(length(min = 0, max = 5,))]
876    #[serde(rename = "AddtlInf", default)]
877    pub addtl_inf: Vec<Max2000Text>,
878}
879#[derive(
880    Debug,
881    Default,
882    Clone,
883    PartialEq,
884    ::serde::Serialize,
885    ::serde::Deserialize,
886    ::derive_builder::Builder,
887    ::validator::Validate,
888)]
889pub struct ExternalModelFormIdentification1Code {
890    #[validate(length(min = 1, max = 4,))]
891    #[serde(rename = "$text")]
892    pub value: String,
893}
894#[derive(
895    Debug,
896    Default,
897    Clone,
898    PartialEq,
899    ::serde::Serialize,
900    ::serde::Deserialize,
901    ::derive_builder::Builder,
902    ::validator::Validate,
903)]
904pub struct UndertakingConfirmation1 {
905    #[validate]
906    #[serde(rename = "Cnfrmr")]
907    pub cnfrmr: PartyIdentification43,
908    #[validate]
909    #[serde(rename = "RefNb")]
910    pub ref_nb: Max35Text,
911    #[serde(rename = "Dt")]
912    pub dt: DateAndDateTimeChoice,
913    #[validate(length(min = 0, max = 5,))]
914    #[serde(rename = "Conf", default)]
915    pub conf: Vec<Max2000Text>,
916}
917#[derive(
918    Debug,
919    Default,
920    Clone,
921    PartialEq,
922    ::serde::Serialize,
923    ::serde::Deserialize,
924    ::derive_builder::Builder,
925    ::validator::Validate,
926)]
927pub struct UndertakingDocumentType2ChoiceEnum {
928    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
929    pub cd: Option<ExternalUndertakingDocumentType2Code>,
930    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
931    pub prtry: Option<GenericIdentification1>,
932}
933#[derive(
934    Debug,
935    Default,
936    Clone,
937    PartialEq,
938    ::serde::Serialize,
939    ::serde::Deserialize,
940    ::derive_builder::Builder,
941    ::validator::Validate,
942)]
943pub struct UndertakingDocumentType2Choice {
944    #[serde(flatten)]
945    pub value: UndertakingDocumentType2ChoiceEnum,
946}
947#[derive(
948    Debug,
949    Default,
950    Clone,
951    PartialEq,
952    ::serde::Serialize,
953    ::serde::Deserialize,
954    ::derive_builder::Builder,
955    ::validator::Validate,
956)]
957pub struct Location1 {
958    #[serde(rename = "Ctry", skip_serializing_if = "Option::is_none")]
959    pub ctry: Option<CountryCode>,
960    #[serde(rename = "CtrySubDvsn", skip_serializing_if = "Option::is_none")]
961    pub ctry_sub_dvsn: Option<CountrySubdivision1Choice>,
962    #[validate(length(min = 0, max = 5,))]
963    #[serde(rename = "Txt", default)]
964    pub txt: Vec<Max2000Text>,
965}
966#[derive(
967    Debug,
968    Default,
969    Clone,
970    PartialEq,
971    ::serde::Serialize,
972    ::serde::Deserialize,
973    ::derive_builder::Builder,
974    ::validator::Validate,
975)]
976pub struct Max2000Text {
977    #[validate(length(min = 1, max = 2000,))]
978    #[serde(rename = "$text")]
979    pub value: String,
980}
981#[derive(
982    Debug,
983    Default,
984    Clone,
985    PartialEq,
986    ::serde::Serialize,
987    ::serde::Deserialize,
988    ::derive_builder::Builder,
989    ::validator::Validate,
990)]
991pub struct ExternalTypeOfParty1Code {
992    #[validate(length(min = 1, max = 4,))]
993    #[serde(rename = "$text")]
994    pub value: String,
995}
996#[derive(
997    Debug,
998    Default,
999    Clone,
1000    PartialEq,
1001    ::serde::Serialize,
1002    ::serde::Deserialize,
1003    ::derive_builder::Builder,
1004    ::validator::Validate,
1005)]
1006pub struct ExpiryTerms1 {
1007    #[serde(rename = "DtTm", skip_serializing_if = "Option::is_none")]
1008    pub dt_tm: Option<DateAndDateTimeChoice>,
1009    #[serde(rename = "AutoXtnsn", skip_serializing_if = "Option::is_none")]
1010    pub auto_xtnsn: Option<AutoExtension1>,
1011    #[serde(rename = "Cond", skip_serializing_if = "Option::is_none")]
1012    pub cond: Option<Max2000Text>,
1013    #[serde(rename = "OpnEnddInd", skip_serializing_if = "Option::is_none")]
1014    pub opn_endd_ind: Option<YesNoIndicator>,
1015}
1016#[derive(
1017    Debug,
1018    Default,
1019    Clone,
1020    PartialEq,
1021    ::serde::Serialize,
1022    ::serde::Deserialize,
1023    ::derive_builder::Builder,
1024    ::validator::Validate,
1025)]
1026pub struct PartyAndType1 {
1027    #[serde(rename = "Tp")]
1028    pub tp: PartyType1Choice,
1029    #[serde(rename = "Pty", skip_serializing_if = "Option::is_none")]
1030    pub pty: Option<PartyIdentification43>,
1031}
1032#[derive(
1033    Debug,
1034    Default,
1035    Clone,
1036    PartialEq,
1037    ::serde::Serialize,
1038    ::serde::Deserialize,
1039    ::derive_builder::Builder,
1040    ::validator::Validate,
1041)]
1042pub struct AutoExtension1 {
1043    #[serde(rename = "Prd", skip_serializing_if = "Option::is_none")]
1044    pub prd: Option<AutoExtend1Choice>,
1045    #[serde(rename = "FnlXpryDt", skip_serializing_if = "Option::is_none")]
1046    pub fnl_xpry_dt: Option<IsoDate>,
1047    #[validate(length(min = 0,))]
1048    #[serde(rename = "NonXtnsnNtfctn", default)]
1049    pub non_xtnsn_ntfctn: Vec<NonExtension1>,
1050}
1051#[derive(
1052    Debug,
1053    Default,
1054    Clone,
1055    PartialEq,
1056    ::serde::Serialize,
1057    ::serde::Deserialize,
1058    ::derive_builder::Builder,
1059    ::validator::Validate,
1060)]
1061pub struct PercentageRate {
1062    #[serde(rename = "$text")]
1063    pub value: f64,
1064}
1065#[derive(
1066    Debug,
1067    Default,
1068    Clone,
1069    PartialEq,
1070    ::serde::Serialize,
1071    ::serde::Deserialize,
1072    ::derive_builder::Builder,
1073    ::validator::Validate,
1074)]
1075pub struct NarrativeType1ChoiceEnum {
1076    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
1077    pub cd: Option<ExternalNarrativeType1Code>,
1078    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
1079    pub prtry: Option<GenericIdentification1>,
1080}
1081#[derive(
1082    Debug,
1083    Default,
1084    Clone,
1085    PartialEq,
1086    ::serde::Serialize,
1087    ::serde::Deserialize,
1088    ::derive_builder::Builder,
1089    ::validator::Validate,
1090)]
1091pub struct NarrativeType1Choice {
1092    #[serde(flatten)]
1093    pub value: NarrativeType1ChoiceEnum,
1094}
1095#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1096pub enum AddressType2Code {
1097    #[serde(rename = "ADDR")]
1098    Addr,
1099    #[serde(rename = "PBOX")]
1100    Pbox,
1101    #[serde(rename = "HOME")]
1102    Home,
1103    #[serde(rename = "BIZZ")]
1104    Bizz,
1105    #[serde(rename = "MLTO")]
1106    Mlto,
1107    #[serde(rename = "DLVY")]
1108    Dlvy,
1109    #[default]
1110    Unknown,
1111}
1112#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1113pub enum NamePrefix1Code {
1114    #[serde(rename = "DOCT")]
1115    Doct,
1116    #[serde(rename = "MIST")]
1117    Mist,
1118    #[serde(rename = "MISS")]
1119    Miss,
1120    #[serde(rename = "MADM")]
1121    Madm,
1122    #[default]
1123    Unknown,
1124}
1125#[derive(
1126    Debug,
1127    Default,
1128    Clone,
1129    PartialEq,
1130    ::serde::Serialize,
1131    ::serde::Deserialize,
1132    ::derive_builder::Builder,
1133    ::validator::Validate,
1134)]
1135pub struct DateAndDateTimeChoiceEnum {
1136    #[serde(rename = "Dt", skip_serializing_if = "Option::is_none")]
1137    pub dt: Option<IsoDate>,
1138    #[serde(rename = "DtTm", skip_serializing_if = "Option::is_none")]
1139    pub dt_tm: Option<IsoDateTime>,
1140}
1141#[derive(
1142    Debug,
1143    Default,
1144    Clone,
1145    PartialEq,
1146    ::serde::Serialize,
1147    ::serde::Deserialize,
1148    ::derive_builder::Builder,
1149    ::validator::Validate,
1150)]
1151pub struct DateAndDateTimeChoice {
1152    #[serde(flatten)]
1153    pub value: DateAndDateTimeChoiceEnum,
1154}
1155#[derive(
1156    Debug,
1157    Default,
1158    Clone,
1159    PartialEq,
1160    ::serde::Serialize,
1161    ::serde::Deserialize,
1162    ::derive_builder::Builder,
1163    ::validator::Validate,
1164)]
1165pub struct AnyBicIdentifier {
1166    #[validate(regex = "ANY_BIC_IDENTIFIER_REGEX")]
1167    #[serde(rename = "$text")]
1168    pub value: String,
1169}
1170#[derive(
1171    Debug,
1172    Default,
1173    Clone,
1174    PartialEq,
1175    ::serde::Serialize,
1176    ::serde::Deserialize,
1177    ::derive_builder::Builder,
1178    ::validator::Validate,
1179)]
1180pub struct ExternalNarrativeType1Code {
1181    #[validate(length(min = 1, max = 4,))]
1182    #[serde(rename = "$text")]
1183    pub value: String,
1184}
1185#[derive(
1186    Debug,
1187    Default,
1188    Clone,
1189    PartialEq,
1190    ::serde::Serialize,
1191    ::serde::Deserialize,
1192    ::derive_builder::Builder,
1193    ::validator::Validate,
1194)]
1195pub struct Max16Text {
1196    #[validate(length(min = 1, max = 16,))]
1197    #[serde(rename = "$text")]
1198    pub value: String,
1199}
1200#[derive(
1201    Debug,
1202    Default,
1203    Clone,
1204    PartialEq,
1205    ::serde::Serialize,
1206    ::serde::Deserialize,
1207    ::derive_builder::Builder,
1208    ::validator::Validate,
1209)]
1210pub struct ExternalUndertakingType1Code {
1211    #[validate(length(min = 1, max = 4,))]
1212    #[serde(rename = "$text")]
1213    pub value: String,
1214}
1215#[derive(
1216    Debug,
1217    Default,
1218    Clone,
1219    PartialEq,
1220    ::serde::Serialize,
1221    ::serde::Deserialize,
1222    ::derive_builder::Builder,
1223    ::validator::Validate,
1224)]
1225pub struct Number {
1226    #[serde(rename = "$text")]
1227    pub value: f64,
1228}
1229#[derive(
1230    Debug,
1231    Default,
1232    Clone,
1233    PartialEq,
1234    ::serde::Serialize,
1235    ::serde::Deserialize,
1236    ::derive_builder::Builder,
1237    ::validator::Validate,
1238)]
1239pub struct ActiveCurrencyAndAmount {
1240    #[serde(rename = "ActiveCurrencyAndAmount")]
1241    pub value: ActiveCurrencyAndAmountSimpleType,
1242    #[serde(rename = "@Ccy")]
1243    pub ccy: ActiveCurrencyCode,
1244}
1245#[derive(
1246    Debug,
1247    Default,
1248    Clone,
1249    PartialEq,
1250    ::serde::Serialize,
1251    ::serde::Deserialize,
1252    ::derive_builder::Builder,
1253    ::validator::Validate,
1254)]
1255pub struct Narrative1 {
1256    #[serde(rename = "Tp", skip_serializing_if = "Option::is_none")]
1257    pub tp: Option<NarrativeType1Choice>,
1258    #[validate(length(min = 1, max = 5,))]
1259    #[serde(rename = "Txt", default)]
1260    pub txt: Vec<Max20000Text>,
1261}
1262#[derive(
1263    Debug,
1264    Default,
1265    Clone,
1266    PartialEq,
1267    ::serde::Serialize,
1268    ::serde::Deserialize,
1269    ::derive_builder::Builder,
1270    ::validator::Validate,
1271)]
1272pub struct IsoDateTime {
1273    #[serde(rename = "$text")]
1274    pub value: ::chrono::DateTime<::chrono::Utc>,
1275}
1276#[derive(
1277    Debug,
1278    Default,
1279    Clone,
1280    PartialEq,
1281    ::serde::Serialize,
1282    ::serde::Deserialize,
1283    ::derive_builder::Builder,
1284    ::validator::Validate,
1285)]
1286pub struct Document10 {
1287    #[serde(rename = "DocTp")]
1288    pub doc_tp: UndertakingDocumentType2Choice,
1289    #[serde(rename = "PresntnChanl", skip_serializing_if = "Option::is_none")]
1290    pub presntn_chanl: Option<Channel1Choice>,
1291    #[serde(rename = "DocFrmt", skip_serializing_if = "Option::is_none")]
1292    pub doc_frmt: Option<DocumentFormat1Choice>,
1293    #[serde(rename = "CpyInd", skip_serializing_if = "Option::is_none")]
1294    pub cpy_ind: Option<YesNoIndicator>,
1295    #[serde(rename = "SgndInd", skip_serializing_if = "Option::is_none")]
1296    pub sgnd_ind: Option<YesNoIndicator>,
1297}
1298#[derive(
1299    Debug,
1300    Default,
1301    Clone,
1302    PartialEq,
1303    ::serde::Serialize,
1304    ::serde::Deserialize,
1305    ::derive_builder::Builder,
1306    ::validator::Validate,
1307)]
1308pub struct PersonIdentificationSchemeName1ChoiceEnum {
1309    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
1310    pub cd: Option<ExternalPersonIdentification1Code>,
1311    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
1312    pub prtry: Option<Max35Text>,
1313}
1314#[derive(
1315    Debug,
1316    Default,
1317    Clone,
1318    PartialEq,
1319    ::serde::Serialize,
1320    ::serde::Deserialize,
1321    ::derive_builder::Builder,
1322    ::validator::Validate,
1323)]
1324pub struct PersonIdentificationSchemeName1Choice {
1325    #[serde(flatten)]
1326    pub value: PersonIdentificationSchemeName1ChoiceEnum,
1327}
1328#[derive(
1329    Debug,
1330    Default,
1331    Clone,
1332    PartialEq,
1333    ::serde::Serialize,
1334    ::serde::Deserialize,
1335    ::derive_builder::Builder,
1336    ::validator::Validate,
1337)]
1338pub struct PostalAddress12 {
1339    #[serde(rename = "TwnNm", skip_serializing_if = "Option::is_none")]
1340    pub twn_nm: Option<Max35Text>,
1341    #[serde(rename = "CtrySubDvsn", skip_serializing_if = "Option::is_none")]
1342    pub ctry_sub_dvsn: Option<Max35Text>,
1343    #[serde(rename = "Ctry")]
1344    pub ctry: CountryCode,
1345}
1346#[derive(
1347    Debug,
1348    Default,
1349    Clone,
1350    PartialEq,
1351    ::serde::Serialize,
1352    ::serde::Deserialize,
1353    ::derive_builder::Builder,
1354    ::validator::Validate,
1355)]
1356pub struct UnderlyingTradeTransaction1 {
1357    #[serde(rename = "Tp")]
1358    pub tp: UnderlyingTradeTransactionType1Choice,
1359    #[serde(rename = "Id", skip_serializing_if = "Option::is_none")]
1360    pub id: Option<Max35Text>,
1361    #[serde(rename = "TxDt", skip_serializing_if = "Option::is_none")]
1362    pub tx_dt: Option<IsoDate>,
1363    #[serde(rename = "TndrClsgDt", skip_serializing_if = "Option::is_none")]
1364    pub tndr_clsg_dt: Option<IsoDate>,
1365    #[serde(rename = "TxAmt", skip_serializing_if = "Option::is_none")]
1366    pub tx_amt: Option<ActiveCurrencyAndAmount>,
1367    #[serde(rename = "CtrctAmtPctg", skip_serializing_if = "Option::is_none")]
1368    pub ctrct_amt_pctg: Option<PercentageRate>,
1369    #[validate(length(min = 0, max = 5,))]
1370    #[serde(rename = "AddtlInf", default)]
1371    pub addtl_inf: Vec<Max2000Text>,
1372}
1373#[derive(
1374    Debug,
1375    Default,
1376    Clone,
1377    PartialEq,
1378    ::serde::Serialize,
1379    ::serde::Deserialize,
1380    ::derive_builder::Builder,
1381    ::validator::Validate,
1382)]
1383pub struct CountrySubdivision1ChoiceEnum {
1384    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
1385    pub prtry: Option<GenericIdentification1>,
1386    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
1387    pub cd: Option<Max35Text>,
1388}
1389#[derive(
1390    Debug,
1391    Default,
1392    Clone,
1393    PartialEq,
1394    ::serde::Serialize,
1395    ::serde::Deserialize,
1396    ::derive_builder::Builder,
1397    ::validator::Validate,
1398)]
1399pub struct CountrySubdivision1Choice {
1400    #[serde(flatten)]
1401    pub value: CountrySubdivision1ChoiceEnum,
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 UndertakingWording1 {
1414    #[serde(rename = "MdlForm", skip_serializing_if = "Option::is_none")]
1415    pub mdl_form: Option<ModelFormIdentification1>,
1416    #[serde(rename = "ReqdWrdgLang", skip_serializing_if = "Option::is_none")]
1417    pub reqd_wrdg_lang: Option<Iso2ALanguageCode>,
1418    #[validate(length(min = 0,))]
1419    #[serde(rename = "UdrtkgTermsAndConds", default)]
1420    pub udrtkg_terms_and_conds: Vec<Narrative1>,
1421}
1422#[derive(
1423    Debug,
1424    Default,
1425    Clone,
1426    PartialEq,
1427    ::serde::Serialize,
1428    ::serde::Deserialize,
1429    ::derive_builder::Builder,
1430    ::validator::Validate,
1431)]
1432pub struct ExternalUnderlyingTradeTransactionType1Code {
1433    #[validate(length(min = 1, max = 4,))]
1434    #[serde(rename = "$text")]
1435    pub value: String,
1436}
1437#[derive(
1438    Debug,
1439    Default,
1440    Clone,
1441    PartialEq,
1442    ::serde::Serialize,
1443    ::serde::Deserialize,
1444    ::derive_builder::Builder,
1445    ::validator::Validate,
1446)]
1447pub struct Max256Text {
1448    #[validate(length(min = 1, max = 256,))]
1449    #[serde(rename = "$text")]
1450    pub value: String,
1451}
1452#[derive(
1453    Debug,
1454    Default,
1455    Clone,
1456    PartialEq,
1457    ::serde::Serialize,
1458    ::serde::Deserialize,
1459    ::derive_builder::Builder,
1460    ::validator::Validate,
1461)]
1462pub struct PhoneNumber {
1463    #[validate(regex = "PHONE_NUMBER_REGEX")]
1464    #[serde(rename = "$text")]
1465    pub value: String,
1466}
1467#[derive(
1468    Debug,
1469    Default,
1470    Clone,
1471    PartialEq,
1472    ::serde::Serialize,
1473    ::serde::Deserialize,
1474    ::derive_builder::Builder,
1475    ::validator::Validate,
1476)]
1477pub struct CommunicationChannel1 {
1478    #[serde(rename = "Mtd")]
1479    pub mtd: ExternalChannel1Code,
1480    #[serde(rename = "DlvrToPtyTp")]
1481    pub dlvr_to_pty_tp: PartyType1Choice,
1482    #[serde(rename = "DlvrToNm", skip_serializing_if = "Option::is_none")]
1483    pub dlvr_to_nm: Option<Max140Text>,
1484    #[serde(rename = "DlvrToAdr", skip_serializing_if = "Option::is_none")]
1485    pub dlvr_to_adr: Option<PostalAddress6>,
1486}
1487#[derive(
1488    Debug,
1489    Default,
1490    Clone,
1491    PartialEq,
1492    ::serde::Serialize,
1493    ::serde::Deserialize,
1494    ::derive_builder::Builder,
1495    ::validator::Validate,
1496)]
1497pub struct ExternalChannel1Code {
1498    #[validate(length(min = 1, max = 4,))]
1499    #[serde(rename = "$text")]
1500    pub value: String,
1501}
1502#[derive(
1503    Debug,
1504    Default,
1505    Clone,
1506    PartialEq,
1507    ::serde::Serialize,
1508    ::serde::Deserialize,
1509    ::derive_builder::Builder,
1510    ::validator::Validate,
1511)]
1512pub struct ExternalPersonIdentification1Code {
1513    #[validate(length(min = 1, max = 4,))]
1514    #[serde(rename = "$text")]
1515    pub value: String,
1516}
1517#[derive(
1518    Debug,
1519    Default,
1520    Clone,
1521    PartialEq,
1522    ::serde::Serialize,
1523    ::serde::Deserialize,
1524    ::derive_builder::Builder,
1525    ::validator::Validate,
1526)]
1527pub struct PresentationMedium1ChoiceEnum {
1528    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
1529    pub cd: Option<PresentationMedium1Code>,
1530    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
1531    pub prtry: Option<GenericIdentification1>,
1532}
1533#[derive(
1534    Debug,
1535    Default,
1536    Clone,
1537    PartialEq,
1538    ::serde::Serialize,
1539    ::serde::Deserialize,
1540    ::derive_builder::Builder,
1541    ::validator::Validate,
1542)]
1543pub struct PresentationMedium1Choice {
1544    #[serde(flatten)]
1545    pub value: PresentationMedium1ChoiceEnum,
1546}
1547#[derive(
1548    Debug,
1549    Default,
1550    Clone,
1551    PartialEq,
1552    ::serde::Serialize,
1553    ::serde::Deserialize,
1554    ::derive_builder::Builder,
1555    ::validator::Validate,
1556)]
1557pub struct ModelFormIdentification1 {
1558    #[serde(rename = "Id")]
1559    pub id: ModelFormIdentification1Choice,
1560    #[serde(rename = "Vrsn", skip_serializing_if = "Option::is_none")]
1561    pub vrsn: Option<Max35Text>,
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 UndertakingIssuanceMessage<
1574    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
1575    B: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
1576> {
1577    #[validate]
1578    #[serde(rename = "UdrtkgDtls")]
1579    pub udrtkg_dtls: Undertaking3<A>,
1580    #[serde(rename = "DgtlSgntr", skip_serializing_if = "Option::is_none")]
1581    pub dgtl_sgntr: Option<PartyAndSignature2<B>>,
1582}
1583#[derive(
1584    Debug,
1585    Default,
1586    Clone,
1587    PartialEq,
1588    ::serde::Serialize,
1589    ::serde::Deserialize,
1590    ::derive_builder::Builder,
1591    ::validator::Validate,
1592)]
1593pub struct PostalAddress6 {
1594    #[serde(rename = "AdrTp", skip_serializing_if = "Option::is_none")]
1595    pub adr_tp: Option<AddressType2Code>,
1596    #[serde(rename = "Dept", skip_serializing_if = "Option::is_none")]
1597    pub dept: Option<Max70Text>,
1598    #[serde(rename = "SubDept", skip_serializing_if = "Option::is_none")]
1599    pub sub_dept: Option<Max70Text>,
1600    #[serde(rename = "StrtNm", skip_serializing_if = "Option::is_none")]
1601    pub strt_nm: Option<Max70Text>,
1602    #[serde(rename = "BldgNb", skip_serializing_if = "Option::is_none")]
1603    pub bldg_nb: Option<Max16Text>,
1604    #[serde(rename = "PstCd", skip_serializing_if = "Option::is_none")]
1605    pub pst_cd: Option<Max16Text>,
1606    #[serde(rename = "TwnNm", skip_serializing_if = "Option::is_none")]
1607    pub twn_nm: Option<Max35Text>,
1608    #[serde(rename = "CtrySubDvsn", skip_serializing_if = "Option::is_none")]
1609    pub ctry_sub_dvsn: Option<Max35Text>,
1610    #[serde(rename = "Ctry", skip_serializing_if = "Option::is_none")]
1611    pub ctry: Option<CountryCode>,
1612    #[validate(length(min = 0, max = 7,))]
1613    #[serde(rename = "AdrLine", default)]
1614    pub adr_line: Vec<Max70Text>,
1615}
1616#[derive(
1617    Debug,
1618    Default,
1619    Clone,
1620    PartialEq,
1621    ::serde::Serialize,
1622    ::serde::Deserialize,
1623    ::derive_builder::Builder,
1624    ::validator::Validate,
1625)]
1626pub struct OrganisationIdentificationSchemeName1ChoiceEnum {
1627    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
1628    pub cd: Option<ExternalOrganisationIdentification1Code>,
1629    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
1630    pub prtry: Option<Max35Text>,
1631}
1632#[derive(
1633    Debug,
1634    Default,
1635    Clone,
1636    PartialEq,
1637    ::serde::Serialize,
1638    ::serde::Deserialize,
1639    ::derive_builder::Builder,
1640    ::validator::Validate,
1641)]
1642pub struct OrganisationIdentificationSchemeName1Choice {
1643    #[serde(flatten)]
1644    pub value: OrganisationIdentificationSchemeName1ChoiceEnum,
1645}
1646#[derive(
1647    Debug,
1648    Default,
1649    Clone,
1650    PartialEq,
1651    ::serde::Serialize,
1652    ::serde::Deserialize,
1653    ::derive_builder::Builder,
1654    ::validator::Validate,
1655)]
1656pub struct UndertakingType1ChoiceEnum {
1657    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
1658    pub cd: Option<ExternalUndertakingType1Code>,
1659    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
1660    pub prtry: Option<GenericIdentification1>,
1661}
1662#[derive(
1663    Debug,
1664    Default,
1665    Clone,
1666    PartialEq,
1667    ::serde::Serialize,
1668    ::serde::Deserialize,
1669    ::derive_builder::Builder,
1670    ::validator::Validate,
1671)]
1672pub struct UndertakingType1Choice {
1673    #[serde(flatten)]
1674    pub value: UndertakingType1ChoiceEnum,
1675}
1676#[derive(
1677    Debug,
1678    Default,
1679    Clone,
1680    PartialEq,
1681    ::serde::Serialize,
1682    ::serde::Deserialize,
1683    ::derive_builder::Builder,
1684    ::validator::Validate,
1685)]
1686pub struct Max20000Text {
1687    #[validate(length(min = 1, max = 20000,))]
1688    #[serde(rename = "$text")]
1689    pub value: String,
1690}
1691#[derive(
1692    Debug,
1693    Default,
1694    Clone,
1695    PartialEq,
1696    ::serde::Serialize,
1697    ::serde::Deserialize,
1698    ::derive_builder::Builder,
1699    ::validator::Validate,
1700)]
1701pub struct FixedOrRecurrentDate1ChoiceEnum {
1702    #[serde(rename = "FxdDt", skip_serializing_if = "Option::is_none")]
1703    pub fxd_dt: Option<IsoDate>,
1704    #[serde(rename = "RcrntDt", skip_serializing_if = "Option::is_none")]
1705    pub rcrnt_dt: Option<DateInformation1>,
1706}
1707#[derive(
1708    Debug,
1709    Default,
1710    Clone,
1711    PartialEq,
1712    ::serde::Serialize,
1713    ::serde::Deserialize,
1714    ::derive_builder::Builder,
1715    ::validator::Validate,
1716)]
1717pub struct FixedOrRecurrentDate1Choice {
1718    #[serde(flatten)]
1719    pub value: FixedOrRecurrentDate1ChoiceEnum,
1720}
1721#[derive(
1722    Debug,
1723    Default,
1724    Clone,
1725    PartialEq,
1726    ::serde::Serialize,
1727    ::serde::Deserialize,
1728    ::derive_builder::Builder,
1729    ::validator::Validate,
1730)]
1731pub struct YesNoIndicator {
1732    #[serde(rename = "$text")]
1733    pub value: bool,
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 Max70Text {
1746    #[validate(length(min = 1, max = 70,))]
1747    #[serde(rename = "$text")]
1748    pub value: String,
1749}
1750#[derive(
1751    Debug,
1752    Default,
1753    Clone,
1754    PartialEq,
1755    ::serde::Serialize,
1756    ::serde::Deserialize,
1757    ::derive_builder::Builder,
1758    ::validator::Validate,
1759)]
1760pub struct Document8 {
1761    #[serde(rename = "Tp")]
1762    pub tp: PresentationDocumentFormat1Choice,
1763    #[serde(rename = "Wrdg", skip_serializing_if = "Option::is_none")]
1764    pub wrdg: Option<Max20000Text>,
1765    #[validate(length(min = 0,))]
1766    #[serde(rename = "ElctrncDtls", default)]
1767    pub elctrnc_dtls: Vec<Presentation3>,
1768}
1769#[derive(
1770    Debug,
1771    Default,
1772    Clone,
1773    PartialEq,
1774    ::serde::Serialize,
1775    ::serde::Deserialize,
1776    ::derive_builder::Builder,
1777    ::validator::Validate,
1778)]
1779pub struct AmountAndTrigger1 {
1780    #[validate]
1781    #[serde(rename = "Id")]
1782    pub id: Max35Text,
1783    #[serde(rename = "AmtDtlsChc")]
1784    pub amt_dtls_chc: AmountOrPercentage1Choice,
1785    #[validate(length(min = 1,))]
1786    #[serde(rename = "Trggr", default)]
1787    pub trggr: Vec<Trigger1>,
1788}
1789#[derive(
1790    Debug,
1791    Default,
1792    Clone,
1793    PartialEq,
1794    ::serde::Serialize,
1795    ::serde::Deserialize,
1796    ::derive_builder::Builder,
1797    ::validator::Validate,
1798)]
1799pub struct AdvisingPartyAdditionalInformation1 {
1800    #[serde(rename = "RefNb", skip_serializing_if = "Option::is_none")]
1801    pub ref_nb: Option<Max35Text>,
1802    #[validate(length(min = 0, max = 5,))]
1803    #[serde(rename = "BkToBnfcryInf", default)]
1804    pub bk_to_bnfcry_inf: Vec<Max2000Text>,
1805}
1806#[derive(
1807    Debug,
1808    Default,
1809    Clone,
1810    PartialEq,
1811    ::serde::Serialize,
1812    ::serde::Deserialize,
1813    ::derive_builder::Builder,
1814    ::validator::Validate,
1815)]
1816pub struct Max2048Text {
1817    #[validate(length(min = 1, max = 2048,))]
1818    #[serde(rename = "$text")]
1819    pub value: String,
1820}
1821#[derive(
1822    Debug,
1823    Default,
1824    Clone,
1825    PartialEq,
1826    ::serde::Serialize,
1827    ::serde::Deserialize,
1828    ::derive_builder::Builder,
1829    ::validator::Validate,
1830)]
1831pub struct OrganisationIdentification8 {
1832    #[serde(rename = "AnyBIC", skip_serializing_if = "Option::is_none")]
1833    pub any_bic: Option<AnyBicIdentifier>,
1834    #[validate(length(min = 0,))]
1835    #[serde(rename = "Othr", default)]
1836    pub othr: Vec<GenericOrganisationIdentification1>,
1837}
1838#[derive(
1839    Debug,
1840    Default,
1841    Clone,
1842    PartialEq,
1843    ::serde::Serialize,
1844    ::serde::Deserialize,
1845    ::derive_builder::Builder,
1846    ::validator::Validate,
1847)]
1848pub struct AutoExtend1ChoiceEnum {
1849    #[serde(rename = "Days", skip_serializing_if = "Option::is_none")]
1850    pub days: Option<Number>,
1851    #[serde(rename = "Yrs", skip_serializing_if = "Option::is_none")]
1852    pub yrs: Option<Number>,
1853    #[serde(rename = "Mnths", skip_serializing_if = "Option::is_none")]
1854    pub mnths: Option<Number>,
1855    #[serde(rename = "Dt", skip_serializing_if = "Option::is_none")]
1856    pub dt: Option<IsoDate>,
1857}
1858#[derive(
1859    Debug,
1860    Default,
1861    Clone,
1862    PartialEq,
1863    ::serde::Serialize,
1864    ::serde::Deserialize,
1865    ::derive_builder::Builder,
1866    ::validator::Validate,
1867)]
1868pub struct AutoExtend1Choice {
1869    #[serde(flatten)]
1870    pub value: AutoExtend1ChoiceEnum,
1871}
1872#[derive(
1873    Debug,
1874    Default,
1875    Clone,
1876    PartialEq,
1877    ::serde::Serialize,
1878    ::serde::Deserialize,
1879    ::derive_builder::Builder,
1880    ::validator::Validate,
1881)]
1882pub struct ProprietaryData3<
1883    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
1884> {
1885    #[validate]
1886    #[serde(flatten)]
1887    pub value: A,
1888}
1889#[derive(
1890    Debug,
1891    Default,
1892    Clone,
1893    PartialEq,
1894    ::serde::Serialize,
1895    ::serde::Deserialize,
1896    ::derive_builder::Builder,
1897    ::validator::Validate,
1898)]
1899pub struct CommunicationMethod1ChoiceEnum {
1900    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
1901    pub cd: Option<ExternalChannel1Code>,
1902    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
1903    pub prtry: Option<GenericIdentification1>,
1904}
1905#[derive(
1906    Debug,
1907    Default,
1908    Clone,
1909    PartialEq,
1910    ::serde::Serialize,
1911    ::serde::Deserialize,
1912    ::derive_builder::Builder,
1913    ::validator::Validate,
1914)]
1915pub struct CommunicationMethod1Choice {
1916    #[serde(flatten)]
1917    pub value: CommunicationMethod1ChoiceEnum,
1918}
1919#[derive(
1920    Debug,
1921    Default,
1922    Clone,
1923    PartialEq,
1924    ::serde::Serialize,
1925    ::serde::Deserialize,
1926    ::derive_builder::Builder,
1927    ::validator::Validate,
1928)]
1929pub struct Presentation3 {
1930    #[serde(rename = "Frmt", skip_serializing_if = "Option::is_none")]
1931    pub frmt: Option<DocumentFormat1Choice>,
1932    #[serde(rename = "Chanl", skip_serializing_if = "Option::is_none")]
1933    pub chanl: Option<Channel1Choice>,
1934    #[serde(rename = "Adr", skip_serializing_if = "Option::is_none")]
1935    pub adr: Option<Max256Text>,
1936}
1937#[derive(
1938    Debug,
1939    Default,
1940    Clone,
1941    PartialEq,
1942    ::serde::Serialize,
1943    ::serde::Deserialize,
1944    ::derive_builder::Builder,
1945    ::validator::Validate,
1946)]
1947pub struct Undertaking3<
1948    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
1949> {
1950    #[validate]
1951    #[serde(rename = "Id")]
1952    pub id: Max35Text,
1953    #[serde(rename = "Nm")]
1954    pub nm: UndertakingIssuanceName1Code,
1955    #[serde(rename = "Tp", skip_serializing_if = "Option::is_none")]
1956    pub tp: Option<UndertakingType1Choice>,
1957    #[serde(rename = "IssncTp")]
1958    pub issnc_tp: IssuanceType1Code,
1959    #[validate(length(min = 0,))]
1960    #[serde(rename = "Applcnt", default)]
1961    pub applcnt: Vec<PartyIdentification43>,
1962    #[validate]
1963    #[serde(rename = "Issr")]
1964    pub issr: PartyIdentification43,
1965    #[validate(length(min = 1,))]
1966    #[serde(rename = "Bnfcry", default)]
1967    pub bnfcry: Vec<PartyIdentification43>,
1968    #[validate]
1969    #[serde(rename = "DtOfIssnc")]
1970    pub dt_of_issnc: IsoDate,
1971    #[serde(rename = "PlcOfIsse", skip_serializing_if = "Option::is_none")]
1972    pub plc_of_isse: Option<PostalAddress12>,
1973    #[serde(rename = "AdvsgPty", skip_serializing_if = "Option::is_none")]
1974    pub advsg_pty: Option<PartyIdentification43>,
1975    #[serde(rename = "ScndAdvsgPty", skip_serializing_if = "Option::is_none")]
1976    pub scnd_advsg_pty: Option<PartyIdentification43>,
1977    #[validate]
1978    #[serde(rename = "UdrtkgAmt")]
1979    pub udrtkg_amt: UndertakingAmount1,
1980    #[validate]
1981    #[serde(rename = "XpryDtls")]
1982    pub xpry_dtls: ExpiryDetails1,
1983    #[serde(rename = "ConfInd", skip_serializing_if = "Option::is_none")]
1984    pub conf_ind: Option<YesNoIndicator>,
1985    #[serde(rename = "ConfPtyTp", skip_serializing_if = "Option::is_none")]
1986    pub conf_pty_tp: Option<ExternalTypeOfParty1Code>,
1987    #[validate(length(min = 0,))]
1988    #[serde(rename = "AddtlPty", default)]
1989    pub addtl_pty: Vec<PartyAndType1>,
1990    #[validate]
1991    #[serde(rename = "GovncRulesAndLaw")]
1992    pub govnc_rules_and_law: GovernanceRules1,
1993    #[validate(length(min = 0,))]
1994    #[serde(rename = "UndrlygTx", default)]
1995    pub undrlyg_tx: Vec<UnderlyingTradeTransaction1>,
1996    #[serde(rename = "PresntnDtls", skip_serializing_if = "Option::is_none")]
1997    pub presntn_dtls: Option<Presentation1>,
1998    #[validate(length(min = 1,))]
1999    #[serde(rename = "UdrtkgTermsAndConds", default)]
2000    pub udrtkg_terms_and_conds: Vec<Narrative1>,
2001    #[serde(rename = "MltplDmndInd", skip_serializing_if = "Option::is_none")]
2002    pub mltpl_dmnd_ind: Option<YesNoIndicator>,
2003    #[serde(rename = "PrtlDmndInd", skip_serializing_if = "Option::is_none")]
2004    pub prtl_dmnd_ind: Option<YesNoIndicator>,
2005    #[serde(rename = "ConfChrgsPyblBy", skip_serializing_if = "Option::is_none")]
2006    pub conf_chrgs_pybl_by: Option<ExternalTypeOfParty1Code>,
2007    #[serde(rename = "TrfChrgsPyblBy", skip_serializing_if = "Option::is_none")]
2008    pub trf_chrgs_pybl_by: Option<ExternalTypeOfParty1Code>,
2009    #[validate(length(min = 0,))]
2010    #[serde(rename = "AutomtcAmtVartn", default)]
2011    pub automtc_amt_vartn: Vec<AutomaticVariation1>,
2012    #[serde(rename = "DlvryChanl", skip_serializing_if = "Option::is_none")]
2013    pub dlvry_chanl: Option<CommunicationChannel1>,
2014    #[serde(rename = "TrfInd", skip_serializing_if = "Option::is_none")]
2015    pub trf_ind: Option<YesNoIndicator>,
2016    #[validate(length(min = 0,))]
2017    #[serde(rename = "NclsdFile", default)]
2018    pub nclsd_file: Vec<Document9<A>>,
2019    #[validate(length(min = 0, max = 5,))]
2020    #[serde(rename = "AddtlInf", default)]
2021    pub addtl_inf: Vec<Max2000Text>,
2022    #[serde(rename = "ReqdLclUdrtkg", skip_serializing_if = "Option::is_none")]
2023    pub reqd_lcl_udrtkg: Option<Undertaking4>,
2024}
2025#[derive(
2026    Debug,
2027    Default,
2028    Clone,
2029    PartialEq,
2030    ::serde::Serialize,
2031    ::serde::Deserialize,
2032    ::derive_builder::Builder,
2033    ::validator::Validate,
2034)]
2035pub struct ExpiryDetails1 {
2036    #[serde(rename = "XpryTerms", skip_serializing_if = "Option::is_none")]
2037    pub xpry_terms: Option<ExpiryTerms1>,
2038    #[validate(length(min = 0, max = 5,))]
2039    #[serde(rename = "AddtlXpryInf", default)]
2040    pub addtl_xpry_inf: Vec<Max2000Text>,
2041}
2042#[derive(
2043    Debug,
2044    Default,
2045    Clone,
2046    PartialEq,
2047    ::serde::Serialize,
2048    ::serde::Deserialize,
2049    ::derive_builder::Builder,
2050    ::validator::Validate,
2051)]
2052pub struct UndertakingDocumentType1ChoiceEnum {
2053    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
2054    pub cd: Option<ExternalUndertakingDocumentType1Code>,
2055    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
2056    pub prtry: Option<GenericIdentification1>,
2057}
2058#[derive(
2059    Debug,
2060    Default,
2061    Clone,
2062    PartialEq,
2063    ::serde::Serialize,
2064    ::serde::Deserialize,
2065    ::derive_builder::Builder,
2066    ::validator::Validate,
2067)]
2068pub struct UndertakingDocumentType1Choice {
2069    #[serde(flatten)]
2070    pub value: UndertakingDocumentType1ChoiceEnum,
2071}
2072#[derive(
2073    Debug,
2074    Default,
2075    Clone,
2076    PartialEq,
2077    ::serde::Serialize,
2078    ::serde::Deserialize,
2079    ::derive_builder::Builder,
2080    ::validator::Validate,
2081)]
2082pub struct ExternalUndertakingDocumentType2Code {
2083    #[validate(length(min = 1, max = 4,))]
2084    #[serde(rename = "$text")]
2085    pub value: String,
2086}
2087#[derive(
2088    Debug,
2089    Default,
2090    Clone,
2091    PartialEq,
2092    ::serde::Serialize,
2093    ::serde::Deserialize,
2094    ::derive_builder::Builder,
2095    ::validator::Validate,
2096)]
2097pub struct DocumentFormat1ChoiceEnum {
2098    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
2099    pub prtry: Option<GenericIdentification1>,
2100    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
2101    pub cd: Option<ExternalDocumentFormat1Code>,
2102}
2103#[derive(
2104    Debug,
2105    Default,
2106    Clone,
2107    PartialEq,
2108    ::serde::Serialize,
2109    ::serde::Deserialize,
2110    ::derive_builder::Builder,
2111    ::validator::Validate,
2112)]
2113pub struct DocumentFormat1Choice {
2114    #[serde(flatten)]
2115    pub value: DocumentFormat1ChoiceEnum,
2116}
2117#[derive(
2118    Debug,
2119    Default,
2120    Clone,
2121    PartialEq,
2122    ::serde::Serialize,
2123    ::serde::Deserialize,
2124    ::derive_builder::Builder,
2125    ::validator::Validate,
2126)]
2127pub struct PlaceOfPresentation1 {
2128    #[serde(rename = "Plc")]
2129    pub plc: ExternalTypeOfParty1Code,
2130    #[serde(rename = "Ctry", skip_serializing_if = "Option::is_none")]
2131    pub ctry: Option<CountryCode>,
2132}
2133#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
2134pub enum PresentationMedium1Code {
2135    #[serde(rename = "BOTH")]
2136    Both,
2137    #[serde(rename = "ELEC")]
2138    Elec,
2139    #[serde(rename = "PAPR")]
2140    Papr,
2141    #[default]
2142    Unknown,
2143}
2144#[derive(
2145    Debug,
2146    Default,
2147    Clone,
2148    PartialEq,
2149    ::serde::Serialize,
2150    ::serde::Deserialize,
2151    ::derive_builder::Builder,
2152    ::validator::Validate,
2153)]
2154pub struct UndertakingAdvice1<
2155    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
2156    B: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
2157    C: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
2158> {
2159    #[validate]
2160    #[serde(rename = "UdrtkgIssncMsg")]
2161    pub udrtkg_issnc_msg: UndertakingIssuanceMessage<A, B>,
2162    #[serde(
2163        rename = "FrstAdvsgPtyAddtlInf",
2164        skip_serializing_if = "Option::is_none"
2165    )]
2166    pub frst_advsg_pty_addtl_inf: Option<AdvisingPartyAdditionalInformation1>,
2167    #[serde(
2168        rename = "ScndAdvsgPtyAddtlInf",
2169        skip_serializing_if = "Option::is_none"
2170    )]
2171    pub scnd_advsg_pty_addtl_inf: Option<AdvisingPartyAdditionalInformation1>,
2172    #[serde(rename = "ConfDtls", skip_serializing_if = "Option::is_none")]
2173    pub conf_dtls: Option<UndertakingConfirmation1>,
2174    #[validate(length(min = 0, max = 3,))]
2175    #[serde(rename = "DgtlSgntr", default)]
2176    pub dgtl_sgntr: Vec<PartyAndSignature2<C>>,
2177}
2178#[derive(
2179    Debug,
2180    Default,
2181    Clone,
2182    PartialEq,
2183    ::serde::Serialize,
2184    ::serde::Deserialize,
2185    ::derive_builder::Builder,
2186    ::validator::Validate,
2187)]
2188pub struct GenericIdentification1 {
2189    #[validate]
2190    #[serde(rename = "Id")]
2191    pub id: Max35Text,
2192    #[serde(rename = "SchmeNm", skip_serializing_if = "Option::is_none")]
2193    pub schme_nm: Option<Max35Text>,
2194    #[serde(rename = "Issr", skip_serializing_if = "Option::is_none")]
2195    pub issr: Option<Max35Text>,
2196}
2197#[derive(
2198    Debug,
2199    Default,
2200    Clone,
2201    PartialEq,
2202    ::serde::Serialize,
2203    ::serde::Deserialize,
2204    ::derive_builder::Builder,
2205    ::validator::Validate,
2206)]
2207pub struct ActiveCurrencyCode {
2208    #[validate(regex = "ACTIVE_CURRENCY_CODE_REGEX")]
2209    #[serde(rename = "$text")]
2210    pub value: String,
2211}
2212#[derive(
2213    Debug,
2214    Default,
2215    Clone,
2216    PartialEq,
2217    ::serde::Serialize,
2218    ::serde::Deserialize,
2219    ::derive_builder::Builder,
2220    ::validator::Validate,
2221)]
2222pub struct Undertaking4 {
2223    #[serde(rename = "Nm")]
2224    pub nm: UndertakingName1Code,
2225    #[serde(rename = "Tp")]
2226    pub tp: ExternalUndertakingType1Code,
2227    #[validate(length(min = 1,))]
2228    #[serde(rename = "Applcnt", default)]
2229    pub applcnt: Vec<PartyIdentification43>,
2230    #[validate(length(min = 1,))]
2231    #[serde(rename = "Bnfcry", default)]
2232    pub bnfcry: Vec<PartyIdentification43>,
2233    #[serde(rename = "DtOfIssnc", skip_serializing_if = "Option::is_none")]
2234    pub dt_of_issnc: Option<IsoDate>,
2235    #[serde(rename = "AdvsgPty", skip_serializing_if = "Option::is_none")]
2236    pub advsg_pty: Option<PartyIdentification43>,
2237    #[serde(rename = "ScndAdvsgPty", skip_serializing_if = "Option::is_none")]
2238    pub scnd_advsg_pty: Option<PartyIdentification43>,
2239    #[validate]
2240    #[serde(rename = "LclUdrtkgAmt")]
2241    pub lcl_udrtkg_amt: UndertakingAmount1,
2242    #[validate]
2243    #[serde(rename = "XpryDtls")]
2244    pub xpry_dtls: ExpiryDetails1,
2245    #[serde(rename = "ConfInd", skip_serializing_if = "Option::is_none")]
2246    pub conf_ind: Option<YesNoIndicator>,
2247    #[validate(length(min = 0,))]
2248    #[serde(rename = "AddtlPty", default)]
2249    pub addtl_pty: Vec<PartyAndType1>,
2250    #[validate]
2251    #[serde(rename = "GovncRulesAndLaw")]
2252    pub govnc_rules_and_law: GovernanceRules1,
2253    #[validate(length(min = 0,))]
2254    #[serde(rename = "UndrlygTx", default)]
2255    pub undrlyg_tx: Vec<UnderlyingTradeTransaction1>,
2256    #[serde(rename = "PresntnDtls", skip_serializing_if = "Option::is_none")]
2257    pub presntn_dtls: Option<Presentation1>,
2258    #[validate]
2259    #[serde(rename = "UdrtkgWrdg")]
2260    pub udrtkg_wrdg: UndertakingWording1,
2261    #[serde(rename = "MltplDmndInd", skip_serializing_if = "Option::is_none")]
2262    pub mltpl_dmnd_ind: Option<YesNoIndicator>,
2263    #[serde(rename = "PrtlDmndInd", skip_serializing_if = "Option::is_none")]
2264    pub prtl_dmnd_ind: Option<YesNoIndicator>,
2265    #[serde(rename = "ConfChrgsPyblBy", skip_serializing_if = "Option::is_none")]
2266    pub conf_chrgs_pybl_by: Option<ExternalTypeOfParty1Code>,
2267    #[serde(rename = "TrfChrgsPyblBy", skip_serializing_if = "Option::is_none")]
2268    pub trf_chrgs_pybl_by: Option<ExternalTypeOfParty1Code>,
2269    #[validate(length(min = 0,))]
2270    #[serde(rename = "AutomtcAmtVartn", default)]
2271    pub automtc_amt_vartn: Vec<AutomaticVariation1>,
2272    #[serde(rename = "DlvryChanl", skip_serializing_if = "Option::is_none")]
2273    pub dlvry_chanl: Option<CommunicationChannel1>,
2274    #[serde(rename = "TrfInd", skip_serializing_if = "Option::is_none")]
2275    pub trf_ind: Option<YesNoIndicator>,
2276    #[validate(length(min = 0, max = 5,))]
2277    #[serde(rename = "AddtlInf", default)]
2278    pub addtl_inf: Vec<Max2000Text>,
2279}
2280#[derive(
2281    Debug,
2282    Default,
2283    Clone,
2284    PartialEq,
2285    ::serde::Serialize,
2286    ::serde::Deserialize,
2287    ::derive_builder::Builder,
2288    ::validator::Validate,
2289)]
2290pub struct UndertakingAmount1 {
2291    #[validate]
2292    #[serde(rename = "Amt")]
2293    pub amt: ActiveCurrencyAndAmount,
2294    #[serde(rename = "PlusTlrnce", skip_serializing_if = "Option::is_none")]
2295    pub plus_tlrnce: Option<PercentageRate>,
2296    #[validate(length(min = 0, max = 5,))]
2297    #[serde(rename = "AddtlInf", default)]
2298    pub addtl_inf: Vec<Max2000Text>,
2299}
2300#[derive(
2301    Debug,
2302    Default,
2303    Clone,
2304    PartialEq,
2305    ::serde::Serialize,
2306    ::serde::Deserialize,
2307    ::derive_builder::Builder,
2308    ::validator::Validate,
2309)]
2310pub struct ActiveCurrencyAndAmountSimpleType {
2311    #[validate(range(min = 0,))]
2312    #[serde(rename = "$text")]
2313    pub value: f64,
2314}
2315#[derive(
2316    Debug,
2317    Default,
2318    Clone,
2319    PartialEq,
2320    ::serde::Serialize,
2321    ::serde::Deserialize,
2322    ::derive_builder::Builder,
2323    ::validator::Validate,
2324)]
2325pub struct UnderlyingTradeTransactionType1ChoiceEnum {
2326    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
2327    pub cd: Option<ExternalUnderlyingTradeTransactionType1Code>,
2328    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
2329    pub prtry: Option<GenericIdentification1>,
2330}
2331#[derive(
2332    Debug,
2333    Default,
2334    Clone,
2335    PartialEq,
2336    ::serde::Serialize,
2337    ::serde::Deserialize,
2338    ::derive_builder::Builder,
2339    ::validator::Validate,
2340)]
2341pub struct UnderlyingTradeTransactionType1Choice {
2342    #[serde(flatten)]
2343    pub value: UnderlyingTradeTransactionType1ChoiceEnum,
2344}
2345#[derive(
2346    Debug,
2347    Default,
2348    Clone,
2349    PartialEq,
2350    ::serde::Serialize,
2351    ::serde::Deserialize,
2352    ::derive_builder::Builder,
2353    ::validator::Validate,
2354)]
2355pub struct ExternalUndertakingDocumentType1Code {
2356    #[validate(length(min = 1, max = 4,))]
2357    #[serde(rename = "$text")]
2358    pub value: String,
2359}
2360#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
2361pub enum PresentationParty1Code {
2362    #[serde(rename = "ETHR")]
2363    Ethr,
2364    #[serde(rename = "EXCN")]
2365    Excn,
2366    #[serde(rename = "EXIS")]
2367    Exis,
2368    #[default]
2369    Unknown,
2370}