swift_mt_message/messages/mt299.rs
1use crate::fields::*;
2use serde::{Deserialize, Serialize};
3use swift_mt_message_macros::{SwiftMessage, serde_swift_fields};
4
5/// MT299: Free Format Message (Category 2 - Financial Institution Transfers)
6///
7/// ## Purpose
8/// Used for free format communication between financial institutions regarding institutional
9/// transfers and treasury operations. Provides a flexible structure for various types of
10/// communication that don't fit into other structured Category 2 message formats.
11///
12/// ## Scope
13/// This message is:
14/// - Sent between financial institutions for treasury and institutional transfer communications
15/// - Used for inquiries, clarifications, and general information exchange about Category 2 operations
16/// - Contains free format narrative text for flexible institutional communication
17/// - Supports various treasury scenarios requiring custom messaging
18/// - Essential for operational communications in correspondent banking
19///
20/// ## Key Features
21/// - **Free Format Content**: Field 79 for flexible narrative text
22/// - **Treasury Context**: Related to institutional transfers and treasury operations
23/// - **Bilateral Communication**: Facilitates bank-to-bank operational communication
24/// - **Reference Tracking**: Links to related institutional transfer messages or operations
25/// - **Flexible Structure**: Minimal mandatory fields for maximum operational flexibility
26/// - **Operational Focus**: Designed for treasury and institutional transfer operations
27///
28/// ## Common Use Cases
29/// - Treasury operation inquiry messages
30/// - Institutional transfer status update communications
31/// - Settlement clarification requests
32/// - Liquidity management communications
33/// - Special instruction messages for institutional transfers
34/// - Problem resolution communications for Category 2 operations
35/// - Correspondent banking operational messages
36/// - Cross-border institutional transfer clarifications
37/// - Central bank communication messages
38/// - Settlement system operational updates
39///
40/// ## Field Structure
41/// - **20**: Sender's Reference (mandatory) - Message reference for this communication
42/// - **21**: Related Reference (optional) - Reference to related message/transaction/operation
43/// - **79**: Narrative (mandatory) - Free format text content for institutional communication
44///
45/// ## Treasury and Institutional Applications
46/// ### Settlement Communications
47/// - Real-time gross settlement (RTGS) operational messages
48/// - Net settlement system communications
49/// - Central bank settlement clarifications
50/// - Cross-currency settlement coordination
51///
52/// ### Correspondent Banking
53/// - Nostro/vostro account operational messages
54/// - Credit line communications
55/// - Account reconciliation inquiries
56/// - Liquidity management discussions
57///
58/// ### Treasury Operations
59/// - Foreign exchange settlement communications
60/// - Money market operation messages
61/// - Institutional funding communications
62/// - Treasury position management messages
63///
64/// ## Network Validation Rules
65/// - **Narrative Format**: If narrative starts with /REJT/ or /RETN/, must follow Payments Reject/Return Guidelines
66/// - **Reference Format**: Transaction references must follow SWIFT formatting standards
67/// - **Content Guidelines**: Free format content should be relevant to institutional transfers
68/// - **Professional Communication**: Content should maintain institutional communication standards
69///
70/// ## Special Format Handling
71/// ### Reject/Return Messages
72/// When the narrative begins with /REJT/ or /RETN/, the message should follow specific guidelines:
73/// - Structured format for payment exception handling
74/// - Clear indication of reject/return reasons
75/// - Reference to original institutional transfer
76/// - Appropriate reason codes where applicable
77///
78/// ### Operational Messages
79/// - Settlement system status updates
80/// - Technical issue communications
81/// - Operational procedure clarifications
82/// - Emergency communication protocols
83///
84/// ## Processing Considerations
85/// - **Operational Priority**: Often used for time-sensitive institutional communications
86/// - **Clarity Required**: Free format content should be clear and unambiguous
87/// - **Follow-up**: May require structured message responses
88/// - **Audit Trail**: Maintains record of institutional operational communications
89/// - **Escalation Path**: Part of operational issue resolution procedures
90///
91/// ## SRG2025 Status
92/// - **Structural Changes**: None - MT299 format remains unchanged in SRG2025
93/// - **Validation Updates**: Enhanced guidelines for institutional transfer communications
94/// - **Processing Improvements**: Better integration with modern settlement systems
95/// - **Compliance Notes**: Enhanced support for operational communication workflows
96///
97/// ## Integration Considerations
98/// - **Banking Systems**: Compatible with treasury management and settlement communication systems
99/// - **API Integration**: RESTful API support for modern institutional banking communication platforms
100/// - **Processing Requirements**: Supports both automated and manual message generation for operational needs
101/// - **Compliance Integration**: Built-in validation for regulatory institutional communication requirements
102///
103/// ## Relationship to Other Messages
104/// - **Triggers**: Triggered by operational needs related to Category 2 institutional transfers
105/// - **Responses**: May generate response messages or trigger follow-up operational actions
106/// - **Related**: Works with all Category 2 messages (MT200-series) for supporting communication
107/// - **Alternatives**: Structured messages for specific scenarios with defined communication formats
108/// - **Status Updates**: Provides flexible operational updates for institutional transfer processes
109
110#[serde_swift_fields]
111#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, SwiftMessage)]
112pub struct MT299 {
113 #[field("20")]
114 pub field_20: Field20,
115
116 #[field("21")]
117 pub field_21: Option<Field21NoOption>,
118
119 #[field("79")]
120 pub field_79: Field79,
121}