iso_20022_caam/
caam_005_001_02.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 MIN_5_MAX_16_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
25}
26
27::lazy_static::lazy_static! {
28    static ref MAX_140_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 MAX_500_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
33}
34
35::lazy_static::lazy_static! {
36    static ref MAX_5000_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
37}
38
39::lazy_static::lazy_static! {
40    static ref MIN_2_MAX_3_ALPHA_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[a-zA-Z]{2,3}"#).unwrap();
41}
42
43::lazy_static::lazy_static! {
44    static ref MAX_35_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
45}
46
47::lazy_static::lazy_static! {
48    static ref MAX_3_NUMERIC_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[0-9]{1,3}"#).unwrap();
49}
50
51::lazy_static::lazy_static! {
52    static ref MAX_100_K_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
53}
54
55/// Returns the namespace of the schema
56pub fn namespace() -> String {
57    "urn:iso:std:iso:20022:tech:xsd:caam.005.001.02".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 Min5Max16Binary {
71    #[validate(length(min = 5, max = 16,), regex = "MIN_5_MAX_16_BINARY_REGEX")]
72    pub value: String,
73}
74#[derive(
75    Debug,
76    Default,
77    Clone,
78    PartialEq,
79    ::serde::Serialize,
80    ::serde::Deserialize,
81    ::derive_builder::Builder,
82    ::validator::Validate,
83)]
84pub struct EncryptedContent3 {
85    #[serde(rename = "CnttTp")]
86    pub cntt_tp: ContentType2Code,
87    #[validate]
88    #[serde(rename = "CnttNcrptnAlgo")]
89    pub cntt_ncrptn_algo: AlgorithmIdentification14,
90    #[validate]
91    #[serde(rename = "NcrptdData")]
92    pub ncrptd_data: Max100KBinary,
93}
94#[derive(
95    Debug,
96    Default,
97    Clone,
98    PartialEq,
99    ::serde::Serialize,
100    ::serde::Deserialize,
101    ::derive_builder::Builder,
102    ::validator::Validate,
103)]
104pub struct Header31 {
105    #[validate]
106    #[serde(rename = "MsgFctn")]
107    pub msg_fctn: AtmMessageFunction2,
108    #[validate]
109    #[serde(rename = "PrtcolVrsn")]
110    pub prtcol_vrsn: Max6Text,
111    #[validate]
112    #[serde(rename = "XchgId")]
113    pub xchg_id: Max3NumericText,
114    #[validate]
115    #[serde(rename = "CreDtTm")]
116    pub cre_dt_tm: IsoDateTime,
117    #[validate]
118    #[serde(rename = "InitgPty")]
119    pub initg_pty: Max35Text,
120    #[serde(rename = "RcptPty", skip_serializing_if = "Option::is_none")]
121    pub rcpt_pty: Option<Max35Text>,
122    #[serde(rename = "PrcStat", skip_serializing_if = "Option::is_none")]
123    pub prc_stat: Option<Max35Text>,
124    #[validate(length(min = 0,))]
125    #[serde(rename = "Tracblt", default)]
126    pub tracblt: Vec<Traceability4>,
127}
128#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
129pub enum Algorithm8Code {
130    #[serde(rename = "MGF1")]
131    Mgf1,
132    #[default]
133    Unknown,
134}
135#[derive(
136    Debug,
137    Default,
138    Clone,
139    PartialEq,
140    ::serde::Serialize,
141    ::serde::Deserialize,
142    ::derive_builder::Builder,
143    ::validator::Validate,
144)]
145pub struct Recipient4ChoiceEnum {
146    #[serde(rename = "KeyTrnsprt", skip_serializing_if = "Option::is_none")]
147    pub key_trnsprt: Option<KeyTransport4>,
148    #[serde(rename = "KEK", skip_serializing_if = "Option::is_none")]
149    pub kek: Option<Kek4>,
150    #[serde(rename = "KeyIdr", skip_serializing_if = "Option::is_none")]
151    pub key_idr: Option<KekIdentifier2>,
152}
153#[derive(
154    Debug,
155    Default,
156    Clone,
157    PartialEq,
158    ::serde::Serialize,
159    ::serde::Deserialize,
160    ::derive_builder::Builder,
161    ::validator::Validate,
162)]
163pub struct Recipient4Choice {
164    #[serde(flatten)]
165    pub value: Recipient4ChoiceEnum,
166}
167#[derive(
168    Debug,
169    Default,
170    Clone,
171    PartialEq,
172    ::serde::Serialize,
173    ::serde::Deserialize,
174    ::derive_builder::Builder,
175    ::validator::Validate,
176)]
177pub struct AlgorithmIdentification13 {
178    #[serde(rename = "Algo")]
179    pub algo: Algorithm13Code,
180    #[serde(rename = "Param", skip_serializing_if = "Option::is_none")]
181    pub param: Option<Parameter6>,
182}
183#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
184pub enum Algorithm15Code {
185    #[serde(rename = "EA2C")]
186    Ea2C,
187    #[serde(rename = "E3DC")]
188    E3Dc,
189    #[serde(rename = "EA9C")]
190    Ea9C,
191    #[serde(rename = "EA5C")]
192    Ea5C,
193    #[default]
194    Unknown,
195}
196#[derive(
197    Debug,
198    Default,
199    Clone,
200    PartialEq,
201    ::serde::Serialize,
202    ::serde::Deserialize,
203    ::derive_builder::Builder,
204    ::validator::Validate,
205)]
206pub struct GenericIdentification77 {
207    #[validate]
208    #[serde(rename = "Id")]
209    pub id: Max35Text,
210    #[serde(rename = "Tp")]
211    pub tp: PartyType12Code,
212    #[serde(rename = "Issr", skip_serializing_if = "Option::is_none")]
213    pub issr: Option<PartyType12Code>,
214    #[serde(rename = "Ctry", skip_serializing_if = "Option::is_none")]
215    pub ctry: Option<Min2Max3AlphaText>,
216    #[serde(rename = "ShrtNm", skip_serializing_if = "Option::is_none")]
217    pub shrt_nm: Option<Max35Text>,
218}
219#[derive(
220    Debug,
221    Default,
222    Clone,
223    PartialEq,
224    ::serde::Serialize,
225    ::serde::Deserialize,
226    ::derive_builder::Builder,
227    ::validator::Validate,
228)]
229pub struct Max140Text {
230    #[validate(length(min = 1, max = 140,))]
231    #[serde(rename = "$text")]
232    pub value: String,
233}
234#[derive(
235    Debug,
236    Default,
237    Clone,
238    PartialEq,
239    ::serde::Serialize,
240    ::serde::Deserialize,
241    ::derive_builder::Builder,
242    ::validator::Validate,
243)]
244pub struct KeyTransport4 {
245    #[serde(rename = "Vrsn", skip_serializing_if = "Option::is_none")]
246    pub vrsn: Option<Number>,
247    #[serde(rename = "RcptId")]
248    pub rcpt_id: Recipient5Choice,
249    #[validate]
250    #[serde(rename = "KeyNcrptnAlgo")]
251    pub key_ncrptn_algo: AlgorithmIdentification11,
252    #[validate]
253    #[serde(rename = "NcrptdKey")]
254    pub ncrptd_key: Max5000Binary,
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 Parameter5 {
267    #[serde(rename = "DgstAlgo", skip_serializing_if = "Option::is_none")]
268    pub dgst_algo: Option<Algorithm11Code>,
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 Parameter6 {
281    #[serde(rename = "NcrptnFrmt", skip_serializing_if = "Option::is_none")]
282    pub ncrptn_frmt: Option<EncryptionFormat1Code>,
283    #[serde(rename = "InitlstnVctr", skip_serializing_if = "Option::is_none")]
284    pub initlstn_vctr: Option<Max500Binary>,
285    #[serde(rename = "BPddg", skip_serializing_if = "Option::is_none")]
286    pub b_pddg: Option<BytePadding1Code>,
287}
288#[derive(
289    Debug,
290    Default,
291    Clone,
292    PartialEq,
293    ::serde::Serialize,
294    ::serde::Deserialize,
295    ::derive_builder::Builder,
296    ::validator::Validate,
297)]
298pub struct ContentInformationType10 {
299    #[serde(rename = "CnttTp")]
300    pub cntt_tp: ContentType2Code,
301    #[validate]
302    #[serde(rename = "EnvlpdData")]
303    pub envlpd_data: EnvelopedData4,
304}
305#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
306pub enum EncryptionFormat1Code {
307    #[serde(rename = "TR31")]
308    Tr31,
309    #[serde(rename = "TR34")]
310    Tr34,
311    #[default]
312    Unknown,
313}
314#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
315pub enum Algorithm12Code {
316    #[serde(rename = "MACC")]
317    Macc,
318    #[serde(rename = "MCCS")]
319    Mccs,
320    #[serde(rename = "CMA1")]
321    Cma1,
322    #[serde(rename = "MCC1")]
323    Mcc1,
324    #[serde(rename = "CMA9")]
325    Cma9,
326    #[serde(rename = "CMA5")]
327    Cma5,
328    #[default]
329    Unknown,
330}
331#[derive(
332    Debug,
333    Default,
334    Clone,
335    PartialEq,
336    ::serde::Serialize,
337    ::serde::Deserialize,
338    ::derive_builder::Builder,
339    ::validator::Validate,
340)]
341pub struct ContentInformationType15 {
342    #[serde(rename = "CnttTp")]
343    pub cntt_tp: ContentType2Code,
344    #[validate]
345    #[serde(rename = "AuthntcdData")]
346    pub authntcd_data: AuthenticatedData4,
347}
348#[derive(
349    Debug,
350    Default,
351    Clone,
352    PartialEq,
353    ::serde::Serialize,
354    ::serde::Deserialize,
355    ::derive_builder::Builder,
356    ::validator::Validate,
357)]
358pub struct EnvelopedData4 {
359    #[serde(rename = "Vrsn", skip_serializing_if = "Option::is_none")]
360    pub vrsn: Option<Number>,
361    #[validate(length(min = 1,))]
362    #[serde(rename = "Rcpt", default)]
363    pub rcpt: Vec<Recipient4Choice>,
364    #[serde(rename = "NcrptdCntt", skip_serializing_if = "Option::is_none")]
365    pub ncrptd_cntt: Option<EncryptedContent3>,
366}
367#[derive(
368    Debug,
369    Default,
370    Clone,
371    PartialEq,
372    ::serde::Serialize,
373    ::serde::Deserialize,
374    ::derive_builder::Builder,
375    ::validator::Validate,
376)]
377pub struct AtmMessageFunction2 {
378    #[serde(rename = "Fctn")]
379    pub fctn: MessageFunction11Code,
380    #[serde(rename = "ATMSvcCd", skip_serializing_if = "Option::is_none")]
381    pub atm_svc_cd: Option<Max35Text>,
382    #[serde(rename = "HstSvcCd", skip_serializing_if = "Option::is_none")]
383    pub hst_svc_cd: Option<Max35Text>,
384}
385#[derive(
386    Debug,
387    Default,
388    Clone,
389    PartialEq,
390    ::serde::Serialize,
391    ::serde::Deserialize,
392    ::derive_builder::Builder,
393    ::validator::Validate,
394)]
395pub struct Max140Binary {
396    #[validate(length(min = 1, max = 140,), regex = "MAX_140_BINARY_REGEX")]
397    pub value: String,
398}
399#[derive(
400    Debug,
401    Default,
402    Clone,
403    PartialEq,
404    ::serde::Serialize,
405    ::serde::Deserialize,
406    ::derive_builder::Builder,
407    ::validator::Validate,
408)]
409pub struct Max6Text {
410    #[validate(length(min = 1, max = 6,))]
411    #[serde(rename = "$text")]
412    pub value: String,
413}
414#[derive(
415    Debug,
416    Default,
417    Clone,
418    PartialEq,
419    ::serde::Serialize,
420    ::serde::Deserialize,
421    ::derive_builder::Builder,
422    ::validator::Validate,
423)]
424pub struct Number {
425    #[serde(rename = "$text")]
426    pub value: f64,
427}
428#[derive(
429    Debug,
430    Default,
431    Clone,
432    PartialEq,
433    ::serde::Serialize,
434    ::serde::Deserialize,
435    ::derive_builder::Builder,
436    ::validator::Validate,
437)]
438pub struct CertificateIssuer1 {
439    #[validate(length(min = 1,))]
440    #[serde(rename = "RltvDstngshdNm", default)]
441    pub rltv_dstngshd_nm: Vec<RelativeDistinguishedName1>,
442}
443#[derive(
444    Debug,
445    Default,
446    Clone,
447    PartialEq,
448    ::serde::Serialize,
449    ::serde::Deserialize,
450    ::derive_builder::Builder,
451    ::validator::Validate,
452)]
453pub struct Parameter4 {
454    #[serde(rename = "NcrptnFrmt", skip_serializing_if = "Option::is_none")]
455    pub ncrptn_frmt: Option<EncryptionFormat1Code>,
456    #[serde(rename = "DgstAlgo", skip_serializing_if = "Option::is_none")]
457    pub dgst_algo: Option<Algorithm11Code>,
458    #[serde(rename = "MskGnrtrAlgo", skip_serializing_if = "Option::is_none")]
459    pub msk_gnrtr_algo: Option<AlgorithmIdentification12>,
460}
461#[derive(
462    Debug,
463    Default,
464    Clone,
465    PartialEq,
466    ::serde::Serialize,
467    ::serde::Deserialize,
468    ::derive_builder::Builder,
469    ::validator::Validate,
470)]
471pub struct AlgorithmIdentification11 {
472    #[serde(rename = "Algo")]
473    pub algo: Algorithm7Code,
474    #[serde(rename = "Param", skip_serializing_if = "Option::is_none")]
475    pub param: Option<Parameter4>,
476}
477#[derive(
478    Debug,
479    Default,
480    Clone,
481    PartialEq,
482    ::serde::Serialize,
483    ::serde::Deserialize,
484    ::derive_builder::Builder,
485    ::validator::Validate,
486)]
487#[serde(rename = "Document")]
488pub struct Document {
489    #[validate]
490    #[serde(rename = "ATMDgnstcReq")]
491    pub atm_dgnstc_req: AtmDiagnosticRequestV02,
492    #[serde(rename = "@xmlns", default = "namespace")]
493    pub xmlns: String,
494}
495#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
496pub enum PartyType12Code {
497    #[serde(rename = "ACQR")]
498    Acqr,
499    #[serde(rename = "ATMG")]
500    Atmg,
501    #[serde(rename = "CISP")]
502    Cisp,
503    #[serde(rename = "DLIS")]
504    Dlis,
505    #[serde(rename = "HSTG")]
506    Hstg,
507    #[serde(rename = "ITAG")]
508    Itag,
509    #[serde(rename = "OATM")]
510    Oatm,
511    #[default]
512    Unknown,
513}
514#[derive(
515    Debug,
516    Default,
517    Clone,
518    PartialEq,
519    ::serde::Serialize,
520    ::serde::Deserialize,
521    ::derive_builder::Builder,
522    ::validator::Validate,
523)]
524pub struct Max500Binary {
525    #[validate(length(min = 1, max = 500,), regex = "MAX_500_BINARY_REGEX")]
526    pub value: String,
527}
528#[derive(
529    Debug,
530    Default,
531    Clone,
532    PartialEq,
533    ::serde::Serialize,
534    ::serde::Deserialize,
535    ::derive_builder::Builder,
536    ::validator::Validate,
537)]
538pub struct Recipient5ChoiceEnum {
539    #[serde(rename = "KeyIdr", skip_serializing_if = "Option::is_none")]
540    pub key_idr: Option<KekIdentifier2>,
541    #[serde(rename = "IssrAndSrlNb", skip_serializing_if = "Option::is_none")]
542    pub issr_and_srl_nb: Option<IssuerAndSerialNumber1>,
543}
544#[derive(
545    Debug,
546    Default,
547    Clone,
548    PartialEq,
549    ::serde::Serialize,
550    ::serde::Deserialize,
551    ::derive_builder::Builder,
552    ::validator::Validate,
553)]
554pub struct Recipient5Choice {
555    #[serde(flatten)]
556    pub value: Recipient5ChoiceEnum,
557}
558#[derive(
559    Debug,
560    Default,
561    Clone,
562    PartialEq,
563    ::serde::Serialize,
564    ::serde::Deserialize,
565    ::derive_builder::Builder,
566    ::validator::Validate,
567)]
568pub struct Traceability4 {
569    #[validate]
570    #[serde(rename = "RlayId")]
571    pub rlay_id: GenericIdentification77,
572    #[serde(rename = "SeqNb", skip_serializing_if = "Option::is_none")]
573    pub seq_nb: Option<Max35Text>,
574    #[validate]
575    #[serde(rename = "TracDtTmIn")]
576    pub trac_dt_tm_in: IsoDateTime,
577    #[validate]
578    #[serde(rename = "TracDtTmOut")]
579    pub trac_dt_tm_out: IsoDateTime,
580}
581#[derive(
582    Debug,
583    Default,
584    Clone,
585    PartialEq,
586    ::serde::Serialize,
587    ::serde::Deserialize,
588    ::derive_builder::Builder,
589    ::validator::Validate,
590)]
591pub struct AlgorithmIdentification14 {
592    #[serde(rename = "Algo")]
593    pub algo: Algorithm15Code,
594    #[serde(rename = "Param", skip_serializing_if = "Option::is_none")]
595    pub param: Option<Parameter6>,
596}
597#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
598pub enum BytePadding1Code {
599    #[serde(rename = "LNGT")]
600    Lngt,
601    #[serde(rename = "NUL8")]
602    Nul8,
603    #[serde(rename = "NULG")]
604    Nulg,
605    #[serde(rename = "NULL")]
606    Null,
607    #[serde(rename = "RAND")]
608    Rand,
609    #[default]
610    Unknown,
611}
612#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
613pub enum Algorithm13Code {
614    #[serde(rename = "EA2C")]
615    Ea2C,
616    #[serde(rename = "E3DC")]
617    E3Dc,
618    #[serde(rename = "DKP9")]
619    Dkp9,
620    #[serde(rename = "UKPT")]
621    Ukpt,
622    #[serde(rename = "UKA1")]
623    Uka1,
624    #[serde(rename = "EA9C")]
625    Ea9C,
626    #[serde(rename = "EA5C")]
627    Ea5C,
628    #[default]
629    Unknown,
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 AtmStatus1 {
642    #[serde(rename = "CurSts")]
643    pub cur_sts: AtmStatus1Code,
644    #[serde(rename = "DmnddSts", skip_serializing_if = "Option::is_none")]
645    pub dmndd_sts: Option<AtmStatus1Code>,
646}
647#[derive(
648    Debug,
649    Default,
650    Clone,
651    PartialEq,
652    ::serde::Serialize,
653    ::serde::Deserialize,
654    ::derive_builder::Builder,
655    ::validator::Validate,
656)]
657pub struct Max35Text {
658    #[validate(length(min = 1, max = 35,))]
659    #[serde(rename = "$text")]
660    pub value: String,
661}
662#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
663pub enum ContentType2Code {
664    #[serde(rename = "DATA")]
665    Data,
666    #[serde(rename = "SIGN")]
667    Sign,
668    #[serde(rename = "EVLP")]
669    Evlp,
670    #[serde(rename = "DGST")]
671    Dgst,
672    #[serde(rename = "AUTH")]
673    Auth,
674    #[default]
675    Unknown,
676}
677#[derive(
678    Debug,
679    Default,
680    Clone,
681    PartialEq,
682    ::serde::Serialize,
683    ::serde::Deserialize,
684    ::derive_builder::Builder,
685    ::validator::Validate,
686)]
687pub struct Max5000Binary {
688    #[validate(length(min = 1, max = 5000,), regex = "MAX_5000_BINARY_REGEX")]
689    pub value: String,
690}
691#[derive(
692    Debug,
693    Default,
694    Clone,
695    PartialEq,
696    ::serde::Serialize,
697    ::serde::Deserialize,
698    ::derive_builder::Builder,
699    ::validator::Validate,
700)]
701pub struct Min2Max3AlphaText {
702    #[validate(regex = "MIN_2_MAX_3_ALPHA_TEXT_REGEX")]
703    #[serde(rename = "$text")]
704    pub value: String,
705}
706#[derive(
707    Debug,
708    Default,
709    Clone,
710    PartialEq,
711    ::serde::Serialize,
712    ::serde::Deserialize,
713    ::derive_builder::Builder,
714    ::validator::Validate,
715)]
716pub struct AlgorithmIdentification15 {
717    #[serde(rename = "Algo")]
718    pub algo: Algorithm12Code,
719    #[serde(rename = "Param", skip_serializing_if = "Option::is_none")]
720    pub param: Option<Parameter7>,
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 IssuerAndSerialNumber1 {
733    #[validate]
734    #[serde(rename = "Issr")]
735    pub issr: CertificateIssuer1,
736    #[validate]
737    #[serde(rename = "SrlNb")]
738    pub srl_nb: Max35Binary,
739}
740#[derive(
741    Debug,
742    Default,
743    Clone,
744    PartialEq,
745    ::serde::Serialize,
746    ::serde::Deserialize,
747    ::derive_builder::Builder,
748    ::validator::Validate,
749)]
750pub struct AlgorithmIdentification12 {
751    #[serde(rename = "Algo")]
752    pub algo: Algorithm8Code,
753    #[serde(rename = "Param", skip_serializing_if = "Option::is_none")]
754    pub param: Option<Parameter5>,
755}
756#[derive(
757    Debug,
758    Default,
759    Clone,
760    PartialEq,
761    ::serde::Serialize,
762    ::serde::Deserialize,
763    ::derive_builder::Builder,
764    ::validator::Validate,
765)]
766pub struct AuthenticatedData4 {
767    #[serde(rename = "Vrsn", skip_serializing_if = "Option::is_none")]
768    pub vrsn: Option<Number>,
769    #[validate(length(min = 1,))]
770    #[serde(rename = "Rcpt", default)]
771    pub rcpt: Vec<Recipient4Choice>,
772    #[validate]
773    #[serde(rename = "MACAlgo")]
774    pub mac_algo: AlgorithmIdentification15,
775    #[validate]
776    #[serde(rename = "NcpsltdCntt")]
777    pub ncpsltd_cntt: EncapsulatedContent3,
778    #[validate]
779    #[serde(rename = "MAC")]
780    pub mac: Max140Binary,
781}
782#[derive(
783    Debug,
784    Default,
785    Clone,
786    PartialEq,
787    ::serde::Serialize,
788    ::serde::Deserialize,
789    ::derive_builder::Builder,
790    ::validator::Validate,
791)]
792pub struct Max35Binary {
793    #[validate(length(min = 1, max = 35,), regex = "MAX_35_BINARY_REGEX")]
794    pub value: String,
795}
796#[derive(
797    Debug,
798    Default,
799    Clone,
800    PartialEq,
801    ::serde::Serialize,
802    ::serde::Deserialize,
803    ::derive_builder::Builder,
804    ::validator::Validate,
805)]
806pub struct IsoDateTime {
807    #[serde(rename = "$text")]
808    pub value: ::chrono::DateTime<::chrono::Utc>,
809}
810#[derive(
811    Debug,
812    Default,
813    Clone,
814    PartialEq,
815    ::serde::Serialize,
816    ::serde::Deserialize,
817    ::derive_builder::Builder,
818    ::validator::Validate,
819)]
820pub struct EncapsulatedContent3 {
821    #[serde(rename = "CnttTp")]
822    pub cntt_tp: ContentType2Code,
823    #[serde(rename = "Cntt", skip_serializing_if = "Option::is_none")]
824    pub cntt: Option<Max100KBinary>,
825}
826#[derive(
827    Debug,
828    Default,
829    Clone,
830    PartialEq,
831    ::serde::Serialize,
832    ::serde::Deserialize,
833    ::derive_builder::Builder,
834    ::validator::Validate,
835)]
836pub struct AtmEnvironment9 {
837    #[serde(rename = "Acqrr", skip_serializing_if = "Option::is_none")]
838    pub acqrr: Option<Acquirer7>,
839    #[serde(rename = "ATMMgrId", skip_serializing_if = "Option::is_none")]
840    pub atm_mgr_id: Option<Max35Text>,
841    #[validate]
842    #[serde(rename = "ATM")]
843    pub atm: AutomatedTellerMachine7,
844}
845#[derive(
846    Debug,
847    Default,
848    Clone,
849    PartialEq,
850    ::serde::Serialize,
851    ::serde::Deserialize,
852    ::derive_builder::Builder,
853    ::validator::Validate,
854)]
855pub struct Acquirer7 {
856    #[serde(rename = "AcqrgInstn", skip_serializing_if = "Option::is_none")]
857    pub acqrg_instn: Option<Max35Text>,
858    #[serde(rename = "Brnch", skip_serializing_if = "Option::is_none")]
859    pub brnch: Option<Max35Text>,
860}
861#[derive(
862    Debug,
863    Default,
864    Clone,
865    PartialEq,
866    ::serde::Serialize,
867    ::serde::Deserialize,
868    ::derive_builder::Builder,
869    ::validator::Validate,
870)]
871pub struct AtmDiagnosticRequest2 {
872    #[validate]
873    #[serde(rename = "Envt")]
874    pub envt: AtmEnvironment9,
875    #[validate]
876    #[serde(rename = "ATMGblSts")]
877    pub atm_gbl_sts: AtmStatus1,
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 AutomatedTellerMachine7 {
890    #[validate]
891    #[serde(rename = "Id")]
892    pub id: Max35Text,
893    #[serde(rename = "AddtlId", skip_serializing_if = "Option::is_none")]
894    pub addtl_id: Option<Max35Text>,
895    #[serde(rename = "SeqNb", skip_serializing_if = "Option::is_none")]
896    pub seq_nb: Option<Max35Text>,
897}
898#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
899pub enum Algorithm11Code {
900    #[serde(rename = "HS25")]
901    Hs25,
902    #[serde(rename = "HS38")]
903    Hs38,
904    #[serde(rename = "HS51")]
905    Hs51,
906    #[serde(rename = "HS01")]
907    Hs01,
908    #[default]
909    Unknown,
910}
911#[derive(
912    Debug,
913    Default,
914    Clone,
915    PartialEq,
916    ::serde::Serialize,
917    ::serde::Deserialize,
918    ::derive_builder::Builder,
919    ::validator::Validate,
920)]
921pub struct Parameter7 {
922    #[serde(rename = "InitlstnVctr", skip_serializing_if = "Option::is_none")]
923    pub initlstn_vctr: Option<Max500Binary>,
924    #[serde(rename = "BPddg", skip_serializing_if = "Option::is_none")]
925    pub b_pddg: Option<BytePadding1Code>,
926}
927#[derive(
928    Debug,
929    Default,
930    Clone,
931    PartialEq,
932    ::serde::Serialize,
933    ::serde::Deserialize,
934    ::derive_builder::Builder,
935    ::validator::Validate,
936)]
937pub struct KekIdentifier2 {
938    #[validate]
939    #[serde(rename = "KeyId")]
940    pub key_id: Max140Text,
941    #[validate]
942    #[serde(rename = "KeyVrsn")]
943    pub key_vrsn: Max140Text,
944    #[serde(rename = "SeqNb", skip_serializing_if = "Option::is_none")]
945    pub seq_nb: Option<Number>,
946    #[serde(rename = "DerivtnId", skip_serializing_if = "Option::is_none")]
947    pub derivtn_id: Option<Min5Max16Binary>,
948}
949#[derive(
950    Debug,
951    Default,
952    Clone,
953    PartialEq,
954    ::serde::Serialize,
955    ::serde::Deserialize,
956    ::derive_builder::Builder,
957    ::validator::Validate,
958)]
959pub struct AtmDiagnosticRequestV02 {
960    #[validate]
961    #[serde(rename = "Hdr")]
962    pub hdr: Header31,
963    #[serde(rename = "PrtctdATMDgnstcReq", skip_serializing_if = "Option::is_none")]
964    pub prtctd_atm_dgnstc_req: Option<ContentInformationType10>,
965    #[serde(rename = "ATMDgnstcReq", skip_serializing_if = "Option::is_none")]
966    pub atm_dgnstc_req: Option<AtmDiagnosticRequest2>,
967    #[serde(rename = "SctyTrlr", skip_serializing_if = "Option::is_none")]
968    pub scty_trlr: Option<ContentInformationType15>,
969}
970#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
971pub enum Algorithm7Code {
972    #[serde(rename = "ERSA")]
973    Ersa,
974    #[serde(rename = "RSAO")]
975    Rsao,
976    #[default]
977    Unknown,
978}
979#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
980pub enum AtmStatus1Code {
981    #[serde(rename = "INSV")]
982    Insv,
983    #[serde(rename = "OUTS")]
984    Outs,
985    #[default]
986    Unknown,
987}
988#[derive(
989    Debug,
990    Default,
991    Clone,
992    PartialEq,
993    ::serde::Serialize,
994    ::serde::Deserialize,
995    ::derive_builder::Builder,
996    ::validator::Validate,
997)]
998pub struct Kek4 {
999    #[serde(rename = "Vrsn", skip_serializing_if = "Option::is_none")]
1000    pub vrsn: Option<Number>,
1001    #[validate]
1002    #[serde(rename = "KEKId")]
1003    pub kek_id: KekIdentifier2,
1004    #[validate]
1005    #[serde(rename = "KeyNcrptnAlgo")]
1006    pub key_ncrptn_algo: AlgorithmIdentification13,
1007    #[validate]
1008    #[serde(rename = "NcrptdKey")]
1009    pub ncrptd_key: Max500Binary,
1010}
1011#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1012pub enum MessageFunction11Code {
1013    #[serde(rename = "BALN")]
1014    Baln,
1015    #[serde(rename = "CMPA")]
1016    Cmpa,
1017    #[serde(rename = "CMPD")]
1018    Cmpd,
1019    #[serde(rename = "ACMD")]
1020    Acmd,
1021    #[serde(rename = "DVCC")]
1022    Dvcc,
1023    #[serde(rename = "DIAQ")]
1024    Diaq,
1025    #[serde(rename = "DIAP")]
1026    Diap,
1027    #[serde(rename = "GSTS")]
1028    Gsts,
1029    #[serde(rename = "INQQ")]
1030    Inqq,
1031    #[serde(rename = "INQP")]
1032    Inqp,
1033    #[serde(rename = "KYAQ")]
1034    Kyaq,
1035    #[serde(rename = "KYAP")]
1036    Kyap,
1037    #[serde(rename = "PINQ")]
1038    Pinq,
1039    #[serde(rename = "PINP")]
1040    Pinp,
1041    #[serde(rename = "RJAQ")]
1042    Rjaq,
1043    #[serde(rename = "RJAP")]
1044    Rjap,
1045    #[serde(rename = "WITV")]
1046    Witv,
1047    #[serde(rename = "WITK")]
1048    Witk,
1049    #[serde(rename = "WITQ")]
1050    Witq,
1051    #[serde(rename = "WITP")]
1052    Witp,
1053    #[serde(rename = "INQC")]
1054    Inqc,
1055    #[serde(rename = "H2AP")]
1056    H2Ap,
1057    #[serde(rename = "H2AQ")]
1058    H2Aq,
1059    #[serde(rename = "TMOP")]
1060    Tmop,
1061    #[serde(rename = "CSEC")]
1062    Csec,
1063    #[serde(rename = "DSEC")]
1064    Dsec,
1065    #[serde(rename = "SKSC")]
1066    Sksc,
1067    #[serde(rename = "SSTS")]
1068    Ssts,
1069    #[serde(rename = "DPSK")]
1070    Dpsk,
1071    #[serde(rename = "DPSV")]
1072    Dpsv,
1073    #[serde(rename = "DPSQ")]
1074    Dpsq,
1075    #[serde(rename = "DPSP")]
1076    Dpsp,
1077    #[serde(rename = "EXPK")]
1078    Expk,
1079    #[serde(rename = "EXPV")]
1080    Expv,
1081    #[serde(rename = "TRFQ")]
1082    Trfq,
1083    #[serde(rename = "TRFP")]
1084    Trfp,
1085    #[serde(rename = "RPTC")]
1086    Rptc,
1087    #[default]
1088    Unknown,
1089}
1090#[derive(
1091    Debug,
1092    Default,
1093    Clone,
1094    PartialEq,
1095    ::serde::Serialize,
1096    ::serde::Deserialize,
1097    ::derive_builder::Builder,
1098    ::validator::Validate,
1099)]
1100pub struct Max3NumericText {
1101    #[validate(regex = "MAX_3_NUMERIC_TEXT_REGEX")]
1102    #[serde(rename = "$text")]
1103    pub value: String,
1104}
1105#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1106pub enum AttributeType1Code {
1107    #[serde(rename = "CNAT")]
1108    Cnat,
1109    #[serde(rename = "LATT")]
1110    Latt,
1111    #[serde(rename = "OATT")]
1112    Oatt,
1113    #[serde(rename = "OUAT")]
1114    Ouat,
1115    #[serde(rename = "CATT")]
1116    Catt,
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 RelativeDistinguishedName1 {
1131    #[serde(rename = "AttrTp")]
1132    pub attr_tp: AttributeType1Code,
1133    #[validate]
1134    #[serde(rename = "AttrVal")]
1135    pub attr_val: Max140Text,
1136}
1137#[derive(
1138    Debug,
1139    Default,
1140    Clone,
1141    PartialEq,
1142    ::serde::Serialize,
1143    ::serde::Deserialize,
1144    ::derive_builder::Builder,
1145    ::validator::Validate,
1146)]
1147pub struct Max100KBinary {
1148    #[validate(length(min = 1, max = 102400,), regex = "MAX_100_K_BINARY_REGEX")]
1149    pub value: String,
1150}