UserHeader

Struct UserHeader 

Source
pub struct UserHeader {
Show 13 fields pub service_identifier: Option<String>, pub banking_priority: Option<String>, pub message_user_reference: Option<String>, pub validation_flag: Option<String>, pub balance_checkpoint: Option<BalanceCheckpoint>, pub message_input_reference: Option<MessageInputReference>, pub related_reference: Option<String>, pub service_type_identifier: Option<String>, pub unique_end_to_end_reference: Option<String>, pub addressee_information: Option<String>, pub payment_release_information: Option<PaymentReleaseInfo>, pub sanctions_screening_info: Option<SanctionsScreeningInfo>, pub payment_controls_info: Option<PaymentControlsInfo>,
}
Expand description

User Header (Block 3): Extended Service Options and Controls

§Purpose

The User Header provides optional extended functionality for SWIFT messages, enabling advanced services, enhanced straight-through processing (STP), compliance controls, and end-to-end transaction tracking. This header has become increasingly important for regulatory compliance, particularly with SWIFT gpi tracking and enhanced payment transparency requirements.

§Format Specification

  • Block Format: {3:{tag:value}{tag:value}...}
  • Tag Format: Numeric tags with structured values
  • Nesting: Tags enclosed in curly braces
  • Optional Block: Entire block 3 may be omitted

§Business Context Applications

  • SWIFT gpi Tracking: End-to-end payment tracking via UETR
  • STP Enhancement: Validation flags for automated processing
  • Regulatory Compliance: Sanctions screening and payment controls
  • Service Enhancement: Additional service options and features

§Critical Tags for Modern Payments

§Tag 121: Unique End-to-End Transaction Reference (UETR)

  • Format: 36 characters UUID (8-4-4-4-12 format)
  • Purpose: Global payment tracking across entire payment chain
  • Mandatory: Required for SWIFT gpi participant banks
  • Persistence: Must remain unchanged through payment lifecycle

§Tag 119: Validation Flag

  • STP: Straight-Through Processing capability
  • REMIT: Remittance information present
  • COV: Cover payment indicator
  • RFDD: Request for Direct Debit

§Service Identifiers

§Tag 103: Service Identifier

  • Purpose: Identifies specific SWIFT services
  • Values: Service-specific codes (e.g., “FIN”)
  • Usage: Mainly for FIN Copy service
  • Processing: Affects message routing and copying

§Tag 111: Service Type Identifier

  • Format: 3 numeric digits
  • Purpose: Sub-categorizes service types
  • Common: “001” for standard processing
  • Impact: May affect fee calculation

§Message Control and Reference

§Tag 108: Message User Reference (MUR)

  • Format: Up to 16 characters
  • Purpose: Sender’s unique reference
  • Usage: Transaction tracking and reconciliation
  • Uniqueness: Should be unique per sender

§Tag 113: Banking Priority

  • Format: 4 characters
  • Values: NORM, HIGH, URGP
  • Purpose: Internal bank priority handling
  • Note: Different from network priority

§Compliance and Screening Tags

§Tag 433: Sanctions Screening Information

  • AOK: All OK - Passed screening
  • FPO: False Positive Override
  • NOK: Not OK - Requires review
  • Additional: Optional 20 character details

§Tag 434: Payment Controls Information

  • Format: 3-letter code + optional details
  • Purpose: Payment control status
  • Usage: Compliance and regulatory controls
  • Processing: May trigger manual review

§FIN Copy Service Tags

§Tag 115: Addressee Information

  • Format: Up to 32 characters
  • Purpose: Third-party copy recipient
  • Service: FIN Copy service only
  • Delivery: Additional message copy sent

§Tag 165: Payment Release Information

  • Format: 3-char code + optional 34 chars
  • Service: FINInform service
  • Purpose: Payment release notifications
  • Usage: Corporate payment factories

§Message Recovery Tags (MIRS)

§Tag 106: Message Input Reference (MIR)

  • Format: 28 characters structured
  • Components: Date + LT + Session + Sequence
  • Purpose: Original message reference
  • Usage: Message recovery and reconciliation

§Tag 423: Balance Checkpoint

  • Format: YYMMDDHHMMSS[ss]
  • Purpose: Balance snapshot timing
  • Service: MIRS recovery service
  • Precision: Optional hundredths of second
  • Format: Up to 16 characters
  • Purpose: Links related messages
  • Usage: Message chains and corrections
  • Service: MIRS functionality

§Network Validation Requirements

  • Tag Compatibility: Some tags require specific services
  • Value Validation: Each tag has specific format rules
  • Service Subscription: Tags available per service agreement
  • Mandatory Combinations: Some tags require others

§Regional and Regulatory Impact

  • SWIFT gpi: Tag 121 mandatory for participants
  • EU Regulations: Enhanced screening requirements
  • US Compliance: Specific control requirements
  • Local Rules: Additional regional tag usage

§STP Processing Impact

§Validation Flag Effects

  • STP Flag: Enables full automation
  • Format Restrictions: Stricter field validation
  • Character Sets: Limited to STP-safe characters
  • Processing Speed: Faster automated handling

§Error Prevention Guidelines

  • UETR Format: Ensure valid UUID format
  • Service Compatibility: Verify tag availability
  • Value Formats: Follow exact specifications
  • Mandatory Rules: Include required combinations

§Integration with Other Blocks

  • Block 1: Service must match subscription
  • Block 2: Message type affects available tags
  • Block 4: Validation flags affect field rules
  • Block 5: Some tags reflected in trailer

§Compliance Framework

  • Regulatory Mandates: Screening and control requirements
  • Audit Trail: Enhanced tracking via UETR
  • Service Agreements: Tag usage per agreement
  • Privacy Rules: Data handling requirements

§Best Practices

  • UETR Generation: Use proper UUID libraries
  • Reference Uniqueness: Ensure MUR uniqueness
  • Screening Accuracy: Accurate screening codes
  • Service Alignment: Use appropriate service tags

§Future Evolution

  • ISO 20022 Alignment: Mapping considerations
  • Enhanced Tracking: Additional tracking features
  • Compliance Evolution: New regulatory tags
  • Service Innovation: New service identifiers

§See Also

  • SWIFT FIN User Handbook: Block 3 Tag Specifications
  • SWIFT gpi Standards: UETR Implementation Guide
  • STP Guidelines: Validation Flag Requirements
  • Compliance Framework: Screening Tag Usage

Fields§

§service_identifier: Option<String>

Tag 103 - Service Identifier (3!a) - Mandatory for FINcopy Service

§banking_priority: Option<String>

Tag 113 - Banking Priority (4!x) - Optional

§message_user_reference: Option<String>

Tag 108 - Message User Reference (16!x) - Optional

§validation_flag: Option<String>

Tag 119 - Validation Flag (8c) - Optional (STP, REMIT, RFDD, COV)

§balance_checkpoint: Option<BalanceCheckpoint>

Tag 423 - Balance checkpoint date and time (YYMMDDHHMMSS[ss]) - Optional (MIRS only)

§message_input_reference: Option<MessageInputReference>

Tag 106 - Message Input Reference MIR (28c) - Optional (MIRS only)

§related_reference: Option<String>

Tag 424 - Related reference (16x) - Optional (MIRS only)

§service_type_identifier: Option<String>

Tag 111 - Service type identifier (3!n) - Optional

§unique_end_to_end_reference: Option<String>

Tag 121 - Unique end-to-end transaction reference (UUID format) - Mandatory for GPI

§addressee_information: Option<String>

Tag 115 - Addressee Information (32x) - Optional (FINCopy only)

§payment_release_information: Option<PaymentReleaseInfo>

Tag 165 - Payment release information receiver (3!c/34x) - Optional (FINInform only)

§sanctions_screening_info: Option<SanctionsScreeningInfo>

Tag 433 - Sanctions screening information (3!a/[20x]) - Optional

§payment_controls_info: Option<PaymentControlsInfo>

Tag 434 - Payment controls information (3!a/[20x]) - Optional

Implementations§

Source§

impl UserHeader

Source

pub fn parse(block3: &str) -> Result<Self>

Parse user header from block 3 string using structured parsing

Trait Implementations§

Source§

impl Clone for UserHeader

Source§

fn clone(&self) -> UserHeader

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UserHeader

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for UserHeader

Source§

fn default() -> UserHeader

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for UserHeader

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for UserHeader

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for UserHeader

Source§

fn eq(&self, other: &UserHeader) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for UserHeader

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for UserHeader

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Fake for T

Source§

fn fake<U>(&self) -> U
where Self: FakeBase<U>,

Source§

fn fake_with_rng<U, R>(&self, rng: &mut R) -> U
where R: Rng + ?Sized, Self: FakeBase<U>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,