iso_20022_setr/
setr_030_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 EXACT_3_NUMERIC_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[0-9]{3}"#).unwrap();
25}
26
27::lazy_static::lazy_static! {
28    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();
29}
30
31::lazy_static::lazy_static! {
32    static ref IBAN_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[a-zA-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}"#).unwrap();
33}
34
35::lazy_static::lazy_static! {
36    static ref COUNTRY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{2,2}"#).unwrap();
37}
38
39::lazy_static::lazy_static! {
40    static ref BBAN_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[a-zA-Z0-9]{1,30}"#).unwrap();
41}
42
43::lazy_static::lazy_static! {
44    static ref EXACT_4_ALPHA_NUMERIC_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[a-zA-Z0-9]{4}"#).unwrap();
45}
46
47::lazy_static::lazy_static! {
48    static ref UPIC_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[0-9]{8,17}"#).unwrap();
49}
50
51::lazy_static::lazy_static! {
52    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();
53}
54
55/// Returns the namespace of the schema
56pub fn namespace() -> String {
57    "urn:iso:std:iso:20022:tech:xsd:setr.030.001.01".to_string()
58}
59
60#[derive(
61    Debug,
62    Default,
63    Clone,
64    PartialEq,
65    ::serde::Serialize,
66    ::serde::Deserialize,
67    ::derive_builder::Builder,
68    ::validator::Validate,
69)]
70pub struct AffirmationStatus7ChoiceEnum {
71    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
72    pub cd: Option<AffirmationStatus1Code>,
73    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
74    pub prtry: Option<GenericIdentification38>,
75}
76#[derive(
77    Debug,
78    Default,
79    Clone,
80    PartialEq,
81    ::serde::Serialize,
82    ::serde::Deserialize,
83    ::derive_builder::Builder,
84    ::validator::Validate,
85)]
86pub struct AffirmationStatus7Choice {
87    #[serde(flatten)]
88    pub value: AffirmationStatus7ChoiceEnum,
89}
90#[derive(
91    Debug,
92    Default,
93    Clone,
94    PartialEq,
95    ::serde::Serialize,
96    ::serde::Deserialize,
97    ::derive_builder::Builder,
98    ::validator::Validate,
99)]
100pub struct AlternatePartyIdentification5 {
101    #[serde(rename = "IdTp")]
102    pub id_tp: IdentificationType40Choice,
103    #[serde(rename = "Ctry")]
104    pub ctry: CountryCode,
105    #[validate]
106    #[serde(rename = "AltrnId")]
107    pub altrn_id: Max35Text,
108}
109#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
110pub enum UnaffirmedReason1Code {
111    #[serde(rename = "NAFF")]
112    Naff,
113    #[default]
114    Unknown,
115}
116#[derive(
117    Debug,
118    Default,
119    Clone,
120    PartialEq,
121    ::serde::Serialize,
122    ::serde::Deserialize,
123    ::derive_builder::Builder,
124    ::validator::Validate,
125)]
126pub struct Max140Text {
127    #[validate(length(min = 1, max = 140,))]
128    #[serde(rename = "$text")]
129    pub value: String,
130}
131#[derive(
132    Debug,
133    Default,
134    Clone,
135    PartialEq,
136    ::serde::Serialize,
137    ::serde::Deserialize,
138    ::derive_builder::Builder,
139    ::validator::Validate,
140)]
141pub struct Max350Text {
142    #[validate(length(min = 1, max = 350,))]
143    #[serde(rename = "$text")]
144    pub value: String,
145}
146#[derive(
147    Debug,
148    Default,
149    Clone,
150    PartialEq,
151    ::serde::Serialize,
152    ::serde::Deserialize,
153    ::derive_builder::Builder,
154    ::validator::Validate,
155)]
156pub struct Max35Text {
157    #[validate(length(min = 1, max = 35,))]
158    #[serde(rename = "$text")]
159    pub value: String,
160}
161#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
162pub enum Eligibility1Code {
163    #[serde(rename = "ELIG")]
164    Elig,
165    #[serde(rename = "RETL")]
166    Retl,
167    #[serde(rename = "PROF")]
168    Prof,
169    #[default]
170    Unknown,
171}
172#[derive(
173    Debug,
174    Default,
175    Clone,
176    PartialEq,
177    ::serde::Serialize,
178    ::serde::Deserialize,
179    ::derive_builder::Builder,
180    ::validator::Validate,
181)]
182pub struct Max16Text {
183    #[validate(length(min = 1, max = 16,))]
184    #[serde(rename = "$text")]
185    pub value: String,
186}
187#[derive(
188    Debug,
189    Default,
190    Clone,
191    PartialEq,
192    ::serde::Serialize,
193    ::serde::Deserialize,
194    ::derive_builder::Builder,
195    ::validator::Validate,
196)]
197pub struct SecuritiesAccount3 {
198    #[validate]
199    #[serde(rename = "Id")]
200    pub id: Max35Text,
201    #[serde(rename = "Tp", skip_serializing_if = "Option::is_none")]
202    pub tp: Option<PurposeCode5Choice>,
203    #[serde(rename = "Nm", skip_serializing_if = "Option::is_none")]
204    pub nm: Option<Max70Text>,
205}
206#[derive(
207    Debug,
208    Default,
209    Clone,
210    PartialEq,
211    ::serde::Serialize,
212    ::serde::Deserialize,
213    ::derive_builder::Builder,
214    ::validator::Validate,
215)]
216pub struct PartyIdentificationAndAccount78 {
217    #[serde(rename = "Id")]
218    pub id: PartyIdentification32Choice,
219    #[serde(rename = "AltrnId", skip_serializing_if = "Option::is_none")]
220    pub altrn_id: Option<AlternatePartyIdentification5>,
221    #[serde(rename = "Sd", skip_serializing_if = "Option::is_none")]
222    pub sd: Option<ClearingSide1Code>,
223    #[serde(rename = "ClrAcct", skip_serializing_if = "Option::is_none")]
224    pub clr_acct: Option<SecuritiesAccount20>,
225    #[serde(rename = "PrcgId", skip_serializing_if = "Option::is_none")]
226    pub prcg_id: Option<Max35Text>,
227    #[serde(rename = "AddtlInf", skip_serializing_if = "Option::is_none")]
228    pub addtl_inf: Option<PartyTextInformation1>,
229}
230#[derive(
231    Debug,
232    Default,
233    Clone,
234    PartialEq,
235    ::serde::Serialize,
236    ::serde::Deserialize,
237    ::derive_builder::Builder,
238    ::validator::Validate,
239)]
240pub struct ConfirmationPartyDetails2 {
241    #[serde(rename = "Id")]
242    pub id: PartyIdentification32Choice,
243    #[serde(rename = "AltrnId", skip_serializing_if = "Option::is_none")]
244    pub altrn_id: Option<AlternatePartyIdentification5>,
245    #[serde(rename = "PrcgId", skip_serializing_if = "Option::is_none")]
246    pub prcg_id: Option<Max35Text>,
247    #[serde(rename = "AddtlInf", skip_serializing_if = "Option::is_none")]
248    pub addtl_inf: Option<PartyTextInformation5>,
249    #[serde(rename = "InvstrCpcty", skip_serializing_if = "Option::is_none")]
250    pub invstr_cpcty: Option<InvestorCapacity3Choice>,
251    #[serde(rename = "TradgPtyCpcty", skip_serializing_if = "Option::is_none")]
252    pub tradg_pty_cpcty: Option<TradingPartyCapacity1Choice>,
253}
254#[derive(
255    Debug,
256    Default,
257    Clone,
258    PartialEq,
259    ::serde::Serialize,
260    ::serde::Deserialize,
261    ::derive_builder::Builder,
262    ::validator::Validate,
263)]
264pub struct PartyIdentification35ChoiceEnum {
265    #[serde(rename = "PrtryId", skip_serializing_if = "Option::is_none")]
266    pub prtry_id: Option<GenericIdentification29>,
267    #[serde(rename = "BIC", skip_serializing_if = "Option::is_none")]
268    pub bic: Option<AnyBicIdentifier>,
269}
270#[derive(
271    Debug,
272    Default,
273    Clone,
274    PartialEq,
275    ::serde::Serialize,
276    ::serde::Deserialize,
277    ::derive_builder::Builder,
278    ::validator::Validate,
279)]
280pub struct PartyIdentification35Choice {
281    #[serde(flatten)]
282    pub value: PartyIdentification35ChoiceEnum,
283}
284#[derive(
285    Debug,
286    Default,
287    Clone,
288    PartialEq,
289    ::serde::Serialize,
290    ::serde::Deserialize,
291    ::derive_builder::Builder,
292    ::validator::Validate,
293)]
294pub struct SecuritiesAccount20 {
295    #[validate]
296    #[serde(rename = "Id")]
297    pub id: Max35Text,
298    #[serde(rename = "Tp")]
299    pub tp: ClearingAccountType1Code,
300    #[serde(rename = "Nm", skip_serializing_if = "Option::is_none")]
301    pub nm: Option<Max70Text>,
302}
303#[derive(
304    Debug,
305    Default,
306    Clone,
307    PartialEq,
308    ::serde::Serialize,
309    ::serde::Deserialize,
310    ::derive_builder::Builder,
311    ::validator::Validate,
312)]
313pub struct GenericIdentification38 {
314    #[validate]
315    #[serde(rename = "Id")]
316    pub id: Exact4AlphaNumericText,
317    #[validate]
318    #[serde(rename = "Issr")]
319    pub issr: Max35Text,
320    #[serde(rename = "SchmeNm", skip_serializing_if = "Option::is_none")]
321    pub schme_nm: Option<Max35Text>,
322}
323#[derive(
324    Debug,
325    Default,
326    Clone,
327    PartialEq,
328    ::serde::Serialize,
329    ::serde::Deserialize,
330    ::derive_builder::Builder,
331    ::validator::Validate,
332)]
333pub struct IdentificationType40ChoiceEnum {
334    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
335    pub cd: Option<TypeOfIdentification2Code>,
336    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
337    pub prtry: Option<GenericIdentification29>,
338}
339#[derive(
340    Debug,
341    Default,
342    Clone,
343    PartialEq,
344    ::serde::Serialize,
345    ::serde::Deserialize,
346    ::derive_builder::Builder,
347    ::validator::Validate,
348)]
349pub struct IdentificationType40Choice {
350    #[serde(flatten)]
351    pub value: IdentificationType40ChoiceEnum,
352}
353#[derive(
354    Debug,
355    Default,
356    Clone,
357    PartialEq,
358    ::serde::Serialize,
359    ::serde::Deserialize,
360    ::derive_builder::Builder,
361    ::validator::Validate,
362)]
363pub struct ConfirmationPartyDetails4 {
364    #[serde(rename = "Id")]
365    pub id: PartyIdentification32Choice,
366    #[serde(rename = "SfkpgAcct", skip_serializing_if = "Option::is_none")]
367    pub sfkpg_acct: Option<SecuritiesAccount3>,
368    #[serde(rename = "CshDtls", skip_serializing_if = "Option::is_none")]
369    pub csh_dtls: Option<AccountIdentification3Choice>,
370    #[serde(rename = "AltrnId", skip_serializing_if = "Option::is_none")]
371    pub altrn_id: Option<AlternatePartyIdentification5>,
372    #[serde(rename = "PrcgId", skip_serializing_if = "Option::is_none")]
373    pub prcg_id: Option<Max35Text>,
374    #[serde(rename = "AddtlInf", skip_serializing_if = "Option::is_none")]
375    pub addtl_inf: Option<PartyTextInformation5>,
376}
377#[derive(
378    Debug,
379    Default,
380    Clone,
381    PartialEq,
382    ::serde::Serialize,
383    ::serde::Deserialize,
384    ::derive_builder::Builder,
385    ::validator::Validate,
386)]
387pub struct PartyTextInformation1 {
388    #[serde(rename = "DclrtnDtls", skip_serializing_if = "Option::is_none")]
389    pub dclrtn_dtls: Option<Max350Text>,
390    #[serde(rename = "PtyCtctDtls", skip_serializing_if = "Option::is_none")]
391    pub pty_ctct_dtls: Option<Max140Text>,
392    #[serde(rename = "RegnDtls", skip_serializing_if = "Option::is_none")]
393    pub regn_dtls: Option<Max350Text>,
394}
395#[derive(
396    Debug,
397    Default,
398    Clone,
399    PartialEq,
400    ::serde::Serialize,
401    ::serde::Deserialize,
402    ::derive_builder::Builder,
403    ::validator::Validate,
404)]
405pub struct Exact3NumericText {
406    #[validate(regex = "EXACT_3_NUMERIC_TEXT_REGEX")]
407    #[serde(rename = "$text")]
408    pub value: String,
409}
410#[derive(
411    Debug,
412    Default,
413    Clone,
414    PartialEq,
415    ::serde::Serialize,
416    ::serde::Deserialize,
417    ::derive_builder::Builder,
418    ::validator::Validate,
419)]
420pub struct ConfirmationPartyDetails3 {
421    #[serde(rename = "Id")]
422    pub id: PartyIdentification32Choice,
423    #[serde(rename = "SfkpgAcct", skip_serializing_if = "Option::is_none")]
424    pub sfkpg_acct: Option<SecuritiesAccount3>,
425    #[serde(rename = "CshDtls", skip_serializing_if = "Option::is_none")]
426    pub csh_dtls: Option<AccountIdentification3Choice>,
427    #[serde(rename = "AltrnId", skip_serializing_if = "Option::is_none")]
428    pub altrn_id: Option<AlternatePartyIdentification5>,
429    #[serde(rename = "PrcgId", skip_serializing_if = "Option::is_none")]
430    pub prcg_id: Option<Max35Text>,
431    #[serde(rename = "AddtlInf", skip_serializing_if = "Option::is_none")]
432    pub addtl_inf: Option<PartyTextInformation5>,
433    #[serde(rename = "PtyCpcty", skip_serializing_if = "Option::is_none")]
434    pub pty_cpcty: Option<TradingPartyCapacity2Choice>,
435}
436#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
437pub enum ClearingAccountType1Code {
438    #[serde(rename = "HOUS")]
439    Hous,
440    #[serde(rename = "CLIE")]
441    Clie,
442    #[serde(rename = "LIPR")]
443    Lipr,
444    #[default]
445    Unknown,
446}
447#[derive(
448    Debug,
449    Default,
450    Clone,
451    PartialEq,
452    ::serde::Serialize,
453    ::serde::Deserialize,
454    ::derive_builder::Builder,
455    ::validator::Validate,
456)]
457pub struct AnyBicIdentifier {
458    #[validate(regex = "ANY_BIC_IDENTIFIER_REGEX")]
459    #[serde(rename = "$text")]
460    pub value: String,
461}
462#[derive(
463    Debug,
464    Default,
465    Clone,
466    PartialEq,
467    ::serde::Serialize,
468    ::serde::Deserialize,
469    ::derive_builder::Builder,
470    ::validator::Validate,
471)]
472pub struct UnaffirmedReason2ChoiceEnum {
473    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
474    pub cd: Option<UnaffirmedReason1Code>,
475    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
476    pub prtry: Option<GenericIdentification38>,
477}
478#[derive(
479    Debug,
480    Default,
481    Clone,
482    PartialEq,
483    ::serde::Serialize,
484    ::serde::Deserialize,
485    ::derive_builder::Builder,
486    ::validator::Validate,
487)]
488pub struct UnaffirmedReason2Choice {
489    #[serde(flatten)]
490    pub value: UnaffirmedReason2ChoiceEnum,
491}
492#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
493pub enum TypeOfIdentification2Code {
494    #[serde(rename = "ARNU")]
495    Arnu,
496    #[serde(rename = "CHTY")]
497    Chty,
498    #[serde(rename = "CORP")]
499    Corp,
500    #[serde(rename = "FIIN")]
501    Fiin,
502    #[serde(rename = "TXID")]
503    Txid,
504    #[default]
505    Unknown,
506}
507#[derive(
508    Debug,
509    Default,
510    Clone,
511    PartialEq,
512    ::serde::Serialize,
513    ::serde::Deserialize,
514    ::derive_builder::Builder,
515    ::validator::Validate,
516)]
517pub struct TradingPartyCapacity1ChoiceEnum {
518    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
519    pub cd: Option<TradingCapacity4Code>,
520    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
521    pub prtry: Option<GenericIdentification38>,
522}
523#[derive(
524    Debug,
525    Default,
526    Clone,
527    PartialEq,
528    ::serde::Serialize,
529    ::serde::Deserialize,
530    ::derive_builder::Builder,
531    ::validator::Validate,
532)]
533pub struct TradingPartyCapacity1Choice {
534    #[serde(flatten)]
535    pub value: TradingPartyCapacity1ChoiceEnum,
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 Max210Text {
548    #[validate(length(min = 1, max = 210,))]
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 Max34Text {
563    #[validate(length(min = 1, max = 34,))]
564    #[serde(rename = "$text")]
565    pub value: String,
566}
567#[derive(
568    Debug,
569    Default,
570    Clone,
571    PartialEq,
572    ::serde::Serialize,
573    ::serde::Deserialize,
574    ::derive_builder::Builder,
575    ::validator::Validate,
576)]
577pub struct SupplementaryData1<
578    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
579> {
580    #[serde(rename = "PlcAndNm", skip_serializing_if = "Option::is_none")]
581    pub plc_and_nm: Option<Max350Text>,
582    #[validate]
583    #[serde(rename = "Envlp")]
584    pub envlp: SupplementaryDataEnvelope1<A>,
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 GenericIdentification29 {
597    #[validate]
598    #[serde(rename = "Id")]
599    pub id: Max35Text,
600    #[validate]
601    #[serde(rename = "Issr")]
602    pub issr: Max35Text,
603    #[serde(rename = "SchmeNm", skip_serializing_if = "Option::is_none")]
604    pub schme_nm: Option<Max35Text>,
605}
606#[derive(
607    Debug,
608    Default,
609    Clone,
610    PartialEq,
611    ::serde::Serialize,
612    ::serde::Deserialize,
613    ::derive_builder::Builder,
614    ::validator::Validate,
615)]
616pub struct ConfirmationParties3 {
617    #[validate]
618    #[serde(rename = "AffrmgPty")]
619    pub affrmg_pty: ConfirmationPartyDetails4,
620    #[serde(rename = "Buyr", skip_serializing_if = "Option::is_none")]
621    pub buyr: Option<ConfirmationPartyDetails2>,
622    #[serde(rename = "Brrwr", skip_serializing_if = "Option::is_none")]
623    pub brrwr: Option<ConfirmationPartyDetails2>,
624    #[serde(rename = "Sellr", skip_serializing_if = "Option::is_none")]
625    pub sellr: Option<ConfirmationPartyDetails2>,
626    #[serde(rename = "Lndr", skip_serializing_if = "Option::is_none")]
627    pub lndr: Option<ConfirmationPartyDetails2>,
628    #[serde(rename = "TradBnfcryPty", skip_serializing_if = "Option::is_none")]
629    pub trad_bnfcry_pty: Option<ConfirmationPartyDetails3>,
630}
631#[derive(
632    Debug,
633    Default,
634    Clone,
635    PartialEq,
636    ::serde::Serialize,
637    ::serde::Deserialize,
638    ::derive_builder::Builder,
639    ::validator::Validate,
640)]
641pub struct TransactiontIdentification4 {
642    #[validate]
643    #[serde(rename = "TxId")]
644    pub tx_id: Max35Text,
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 InvestorCapacity3ChoiceEnum {
657    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
658    pub cd: Option<Eligibility1Code>,
659    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
660    pub prtry: Option<GenericIdentification38>,
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 InvestorCapacity3Choice {
673    #[serde(flatten)]
674    pub value: InvestorCapacity3ChoiceEnum,
675}
676#[derive(
677    Debug,
678    Default,
679    Clone,
680    PartialEq,
681    ::serde::Serialize,
682    ::serde::Deserialize,
683    ::derive_builder::Builder,
684    ::validator::Validate,
685)]
686pub struct NameAndAddress13 {
687    #[validate]
688    #[serde(rename = "Nm")]
689    pub nm: Max350Text,
690    #[serde(rename = "Adr", skip_serializing_if = "Option::is_none")]
691    pub adr: Option<PostalAddress8>,
692}
693#[derive(
694    Debug,
695    Default,
696    Clone,
697    PartialEq,
698    ::serde::Serialize,
699    ::serde::Deserialize,
700    ::derive_builder::Builder,
701    ::validator::Validate,
702)]
703pub struct SimpleIdentificationInformation2 {
704    #[validate]
705    #[serde(rename = "Id")]
706    pub id: Max34Text,
707}
708#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
709pub enum TradingCapacity4Code {
710    #[serde(rename = "PRIN")]
711    Prin,
712    #[serde(rename = "CPRN")]
713    Cprn,
714    #[serde(rename = "RISP")]
715    Risp,
716    #[serde(rename = "PROP")]
717    Prop,
718    #[serde(rename = "AGEN")]
719    Agen,
720    #[serde(rename = "CAGN")]
721    Cagn,
722    #[serde(rename = "OAGN")]
723    Oagn,
724    #[serde(rename = "PRAG")]
725    Prag,
726    #[serde(rename = "BAGN")]
727    Bagn,
728    #[serde(rename = "INFI")]
729    Infi,
730    #[serde(rename = "MKTM")]
731    Mktm,
732    #[serde(rename = "MLTF")]
733    Mltf,
734    #[serde(rename = "RMKT")]
735    Rmkt,
736    #[serde(rename = "SINT")]
737    Sint,
738    #[serde(rename = "TAGT")]
739    Tagt,
740    #[default]
741    Unknown,
742}
743#[derive(
744    Debug,
745    Default,
746    Clone,
747    PartialEq,
748    ::serde::Serialize,
749    ::serde::Deserialize,
750    ::derive_builder::Builder,
751    ::validator::Validate,
752)]
753pub struct IbanIdentifier {
754    #[validate(regex = "IBAN_IDENTIFIER_REGEX")]
755    #[serde(rename = "$text")]
756    pub value: String,
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 CountryCode {
769    #[validate(regex = "COUNTRY_CODE_REGEX")]
770    #[serde(rename = "$text")]
771    pub value: String,
772}
773#[derive(
774    Debug,
775    Default,
776    Clone,
777    PartialEq,
778    ::serde::Serialize,
779    ::serde::Deserialize,
780    ::derive_builder::Builder,
781    ::validator::Validate,
782)]
783pub struct IdentificationReference8ChoiceEnum {
784    #[serde(rename = "BlckId", skip_serializing_if = "Option::is_none")]
785    pub blck_id: Option<Max35Text>,
786    #[serde(rename = "CmplcId", skip_serializing_if = "Option::is_none")]
787    pub cmplc_id: Option<Max35Text>,
788    #[serde(rename = "CollTxId", skip_serializing_if = "Option::is_none")]
789    pub coll_tx_id: Option<Max35Text>,
790    #[serde(rename = "IndvAllcnId", skip_serializing_if = "Option::is_none")]
791    pub indv_allcn_id: Option<Max35Text>,
792    #[serde(rename = "IndxId", skip_serializing_if = "Option::is_none")]
793    pub indx_id: Option<Max35Text>,
794    #[serde(rename = "MktInfrstrctrTxId", skip_serializing_if = "Option::is_none")]
795    pub mkt_infrstrctr_tx_id: Option<Max35Text>,
796    #[serde(rename = "InstgPtyTxId", skip_serializing_if = "Option::is_none")]
797    pub instg_pty_tx_id: Option<Max35Text>,
798    #[serde(rename = "PoolId", skip_serializing_if = "Option::is_none")]
799    pub pool_id: Option<Max35Text>,
800    #[serde(rename = "ScndryAllcnId", skip_serializing_if = "Option::is_none")]
801    pub scndry_allcn_id: Option<Max35Text>,
802    #[serde(rename = "ClntOrdrLkId", skip_serializing_if = "Option::is_none")]
803    pub clnt_ordr_lk_id: Option<Max35Text>,
804    #[serde(rename = "CmonId", skip_serializing_if = "Option::is_none")]
805    pub cmon_id: Option<Max35Text>,
806    #[serde(rename = "ExctgPtyTxId", skip_serializing_if = "Option::is_none")]
807    pub exctg_pty_tx_id: Option<Max35Text>,
808    #[serde(rename = "AllcnId", skip_serializing_if = "Option::is_none")]
809    pub allcn_id: Option<Max35Text>,
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 IdentificationReference8Choice {
822    #[serde(flatten)]
823    pub value: IdentificationReference8ChoiceEnum,
824}
825#[derive(
826    Debug,
827    Default,
828    Clone,
829    PartialEq,
830    ::serde::Serialize,
831    ::serde::Deserialize,
832    ::derive_builder::Builder,
833    ::validator::Validate,
834)]
835pub struct PartyTextInformation5 {
836    #[serde(rename = "DclrtnDtls", skip_serializing_if = "Option::is_none")]
837    pub dclrtn_dtls: Option<Max350Text>,
838    #[serde(rename = "PtyCtctDtls", skip_serializing_if = "Option::is_none")]
839    pub pty_ctct_dtls: Option<Max140Text>,
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 PartyIdentification32ChoiceEnum {
852    #[serde(rename = "NmAndAdr", skip_serializing_if = "Option::is_none")]
853    pub nm_and_adr: Option<NameAndAddress13>,
854    #[serde(rename = "BIC", skip_serializing_if = "Option::is_none")]
855    pub bic: Option<AnyBicIdentifier>,
856    #[serde(rename = "PrtryId", skip_serializing_if = "Option::is_none")]
857    pub prtry_id: Option<GenericIdentification29>,
858}
859#[derive(
860    Debug,
861    Default,
862    Clone,
863    PartialEq,
864    ::serde::Serialize,
865    ::serde::Deserialize,
866    ::derive_builder::Builder,
867    ::validator::Validate,
868)]
869pub struct PartyIdentification32Choice {
870    #[serde(flatten)]
871    pub value: PartyIdentification32ChoiceEnum,
872}
873#[derive(
874    Debug,
875    Default,
876    Clone,
877    PartialEq,
878    ::serde::Serialize,
879    ::serde::Deserialize,
880    ::derive_builder::Builder,
881    ::validator::Validate,
882)]
883pub struct PurposeCode5ChoiceEnum {
884    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
885    pub prtry: Option<GenericIdentification38>,
886    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
887    pub cd: Option<SecuritiesAccountPurposeType1Code>,
888}
889#[derive(
890    Debug,
891    Default,
892    Clone,
893    PartialEq,
894    ::serde::Serialize,
895    ::serde::Deserialize,
896    ::derive_builder::Builder,
897    ::validator::Validate,
898)]
899pub struct PurposeCode5Choice {
900    #[serde(flatten)]
901    pub value: PurposeCode5ChoiceEnum,
902}
903#[derive(
904    Debug,
905    Default,
906    Clone,
907    PartialEq,
908    ::serde::Serialize,
909    ::serde::Deserialize,
910    ::derive_builder::Builder,
911    ::validator::Validate,
912)]
913pub struct BbanIdentifier {
914    #[validate(regex = "BBAN_IDENTIFIER_REGEX")]
915    #[serde(rename = "$text")]
916    pub value: String,
917}
918#[derive(
919    Debug,
920    Default,
921    Clone,
922    PartialEq,
923    ::serde::Serialize,
924    ::serde::Deserialize,
925    ::derive_builder::Builder,
926    ::validator::Validate,
927)]
928pub struct DocumentNumber4ChoiceEnum {
929    #[serde(rename = "PrtryNb", skip_serializing_if = "Option::is_none")]
930    pub prtry_nb: Option<GenericIdentification38>,
931    #[serde(rename = "LngNb", skip_serializing_if = "Option::is_none")]
932    pub lng_nb: Option<Iso20022MessageIdentificationText>,
933    #[serde(rename = "ShrtNb", skip_serializing_if = "Option::is_none")]
934    pub shrt_nb: Option<Exact3NumericText>,
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 DocumentNumber4Choice {
947    #[serde(flatten)]
948    pub value: DocumentNumber4ChoiceEnum,
949}
950#[derive(
951    Debug,
952    Default,
953    Clone,
954    PartialEq,
955    ::serde::Serialize,
956    ::serde::Deserialize,
957    ::derive_builder::Builder,
958    ::validator::Validate,
959)]
960pub struct Exact4AlphaNumericText {
961    #[validate(regex = "EXACT_4_ALPHA_NUMERIC_TEXT_REGEX")]
962    #[serde(rename = "$text")]
963    pub value: String,
964}
965#[derive(
966    Debug,
967    Default,
968    Clone,
969    PartialEq,
970    ::serde::Serialize,
971    ::serde::Deserialize,
972    ::derive_builder::Builder,
973    ::validator::Validate,
974)]
975pub struct TradingPartyCapacity2ChoiceEnum {
976    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
977    pub cd: Option<TradingCapacity6Code>,
978    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
979    pub prtry: Option<GenericIdentification29>,
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 TradingPartyCapacity2Choice {
992    #[serde(flatten)]
993    pub value: TradingPartyCapacity2ChoiceEnum,
994}
995#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
996pub enum AddressType2Code {
997    #[serde(rename = "ADDR")]
998    Addr,
999    #[serde(rename = "PBOX")]
1000    Pbox,
1001    #[serde(rename = "HOME")]
1002    Home,
1003    #[serde(rename = "BIZZ")]
1004    Bizz,
1005    #[serde(rename = "MLTO")]
1006    Mlto,
1007    #[serde(rename = "DLVY")]
1008    Dlvy,
1009    #[default]
1010    Unknown,
1011}
1012#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1013pub enum SecuritiesAccountPurposeType1Code {
1014    #[serde(rename = "MARG")]
1015    Marg,
1016    #[serde(rename = "SHOR")]
1017    Shor,
1018    #[serde(rename = "ABRD")]
1019    Abrd,
1020    #[serde(rename = "CEND")]
1021    Cend,
1022    #[serde(rename = "DVPA")]
1023    Dvpa,
1024    #[serde(rename = "PHYS")]
1025    Phys,
1026    #[default]
1027    Unknown,
1028}
1029#[derive(
1030    Debug,
1031    Default,
1032    Clone,
1033    PartialEq,
1034    ::serde::Serialize,
1035    ::serde::Deserialize,
1036    ::derive_builder::Builder,
1037    ::validator::Validate,
1038)]
1039pub struct StatusAndReason10 {
1040    #[serde(rename = "AffirmSts")]
1041    pub affirm_sts: AffirmationStatus7Choice,
1042    #[serde(rename = "UaffrmdRsn", skip_serializing_if = "Option::is_none")]
1043    pub uaffrmd_rsn: Option<UnaffirmedReason2Choice>,
1044    #[serde(rename = "AddtlRsnInf", skip_serializing_if = "Option::is_none")]
1045    pub addtl_rsn_inf: Option<Max210Text>,
1046}
1047#[derive(
1048    Debug,
1049    Default,
1050    Clone,
1051    PartialEq,
1052    ::serde::Serialize,
1053    ::serde::Deserialize,
1054    ::derive_builder::Builder,
1055    ::validator::Validate,
1056)]
1057pub struct SupplementaryDataEnvelope1<
1058    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
1059> {
1060    #[validate]
1061    #[serde(flatten)]
1062    pub value: A,
1063}
1064#[derive(
1065    Debug,
1066    Default,
1067    Clone,
1068    PartialEq,
1069    ::serde::Serialize,
1070    ::serde::Deserialize,
1071    ::derive_builder::Builder,
1072    ::validator::Validate,
1073)]
1074pub struct Clearing3 {
1075    #[validate(length(min = 1,))]
1076    #[serde(rename = "ClrMmb", default)]
1077    pub clr_mmb: Vec<PartyIdentificationAndAccount78>,
1078    #[serde(rename = "ClrSgmt", skip_serializing_if = "Option::is_none")]
1079    pub clr_sgmt: Option<PartyIdentification35Choice>,
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)]
1091#[serde(rename = "Document")]
1092pub struct Document<
1093    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
1094> {
1095    #[validate]
1096    #[serde(rename = "SctiesTradConfRspn")]
1097    pub scties_trad_conf_rspn: SecuritiesTradeConfirmationResponseV01<A>,
1098    #[serde(rename = "@xmlns", default = "namespace")]
1099    pub xmlns: String,
1100}
1101#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1102pub enum TradingCapacity6Code {
1103    #[serde(rename = "AGEN")]
1104    Agen,
1105    #[serde(rename = "BAGN")]
1106    Bagn,
1107    #[serde(rename = "CAGN")]
1108    Cagn,
1109    #[serde(rename = "CPRN")]
1110    Cprn,
1111    #[serde(rename = "OAGN")]
1112    Oagn,
1113    #[serde(rename = "PRAG")]
1114    Prag,
1115    #[serde(rename = "PRIN")]
1116    Prin,
1117    #[default]
1118    Unknown,
1119}
1120#[derive(
1121    Debug,
1122    Default,
1123    Clone,
1124    PartialEq,
1125    ::serde::Serialize,
1126    ::serde::Deserialize,
1127    ::derive_builder::Builder,
1128    ::validator::Validate,
1129)]
1130pub struct PostalAddress8 {
1131    #[serde(rename = "AdrTp", skip_serializing_if = "Option::is_none")]
1132    pub adr_tp: Option<AddressType2Code>,
1133    #[validate(length(min = 0, max = 5,))]
1134    #[serde(rename = "AdrLine", default)]
1135    pub adr_line: Vec<Max70Text>,
1136    #[serde(rename = "StrtNm", skip_serializing_if = "Option::is_none")]
1137    pub strt_nm: Option<Max70Text>,
1138    #[serde(rename = "BldgNb", skip_serializing_if = "Option::is_none")]
1139    pub bldg_nb: Option<Max16Text>,
1140    #[serde(rename = "PstCd", skip_serializing_if = "Option::is_none")]
1141    pub pst_cd: Option<Max16Text>,
1142    #[serde(rename = "TwnNm", skip_serializing_if = "Option::is_none")]
1143    pub twn_nm: Option<Max35Text>,
1144    #[serde(rename = "CtrySubDvsn", skip_serializing_if = "Option::is_none")]
1145    pub ctry_sub_dvsn: Option<Max35Text>,
1146    #[serde(rename = "Ctry")]
1147    pub ctry: CountryCode,
1148}
1149#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1150pub enum ClearingSide1Code {
1151    #[serde(rename = "BUYI")]
1152    Buyi,
1153    #[serde(rename = "SELL")]
1154    Sell,
1155    #[serde(rename = "LEND")]
1156    Lend,
1157    #[serde(rename = "BORW")]
1158    Borw,
1159    #[default]
1160    Unknown,
1161}
1162#[derive(
1163    Debug,
1164    Default,
1165    Clone,
1166    PartialEq,
1167    ::serde::Serialize,
1168    ::serde::Deserialize,
1169    ::derive_builder::Builder,
1170    ::validator::Validate,
1171)]
1172pub struct UpicIdentifier {
1173    #[validate(regex = "UPIC_IDENTIFIER_REGEX")]
1174    #[serde(rename = "$text")]
1175    pub value: String,
1176}
1177#[derive(
1178    Debug,
1179    Default,
1180    Clone,
1181    PartialEq,
1182    ::serde::Serialize,
1183    ::serde::Deserialize,
1184    ::derive_builder::Builder,
1185    ::validator::Validate,
1186)]
1187pub struct Iso20022MessageIdentificationText {
1188    #[validate(regex = "ISO_20022_MESSAGE_IDENTIFICATION_TEXT_REGEX")]
1189    #[serde(rename = "$text")]
1190    pub value: String,
1191}
1192#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1193pub enum AffirmationStatus1Code {
1194    #[serde(rename = "AFFI")]
1195    Affi,
1196    #[serde(rename = "NAFI")]
1197    Nafi,
1198    #[default]
1199    Unknown,
1200}
1201#[derive(
1202    Debug,
1203    Default,
1204    Clone,
1205    PartialEq,
1206    ::serde::Serialize,
1207    ::serde::Deserialize,
1208    ::derive_builder::Builder,
1209    ::validator::Validate,
1210)]
1211pub struct Max70Text {
1212    #[validate(length(min = 1, max = 70,))]
1213    #[serde(rename = "$text")]
1214    pub value: String,
1215}
1216#[derive(
1217    Debug,
1218    Default,
1219    Clone,
1220    PartialEq,
1221    ::serde::Serialize,
1222    ::serde::Deserialize,
1223    ::derive_builder::Builder,
1224    ::validator::Validate,
1225)]
1226pub struct Linkages15 {
1227    #[serde(rename = "MsgNb", skip_serializing_if = "Option::is_none")]
1228    pub msg_nb: Option<DocumentNumber4Choice>,
1229    #[serde(rename = "Ref")]
1230    pub r#ref: IdentificationReference8Choice,
1231}
1232#[derive(
1233    Debug,
1234    Default,
1235    Clone,
1236    PartialEq,
1237    ::serde::Serialize,
1238    ::serde::Deserialize,
1239    ::derive_builder::Builder,
1240    ::validator::Validate,
1241)]
1242pub struct SecuritiesTradeConfirmationResponseV01<
1243    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
1244> {
1245    #[validate]
1246    #[serde(rename = "Id")]
1247    pub id: TransactiontIdentification4,
1248    #[validate(length(min = 1,))]
1249    #[serde(rename = "Refs", default)]
1250    pub refs: Vec<Linkages15>,
1251    #[validate]
1252    #[serde(rename = "Sts")]
1253    pub sts: StatusAndReason10,
1254    #[serde(rename = "ClrDtls", skip_serializing_if = "Option::is_none")]
1255    pub clr_dtls: Option<Clearing3>,
1256    #[validate(length(min = 0,))]
1257    #[serde(rename = "ConfPties", default)]
1258    pub conf_pties: Vec<ConfirmationParties3>,
1259    #[validate(length(min = 0,))]
1260    #[serde(rename = "SplmtryData", default)]
1261    pub splmtry_data: Vec<SupplementaryData1<A>>,
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 AccountIdentification3ChoiceEnum {
1274    #[serde(rename = "UPIC", skip_serializing_if = "Option::is_none")]
1275    pub upic: Option<UpicIdentifier>,
1276    #[serde(rename = "BBAN", skip_serializing_if = "Option::is_none")]
1277    pub bban: Option<BbanIdentifier>,
1278    #[serde(rename = "PrtryAcct", skip_serializing_if = "Option::is_none")]
1279    pub prtry_acct: Option<SimpleIdentificationInformation2>,
1280    #[serde(rename = "IBAN", skip_serializing_if = "Option::is_none")]
1281    pub iban: Option<IbanIdentifier>,
1282}
1283#[derive(
1284    Debug,
1285    Default,
1286    Clone,
1287    PartialEq,
1288    ::serde::Serialize,
1289    ::serde::Deserialize,
1290    ::derive_builder::Builder,
1291    ::validator::Validate,
1292)]
1293pub struct AccountIdentification3Choice {
1294    #[serde(flatten)]
1295    pub value: AccountIdentification3ChoiceEnum,
1296}