head.001.001.01
The Business Layer deals with Business Messages. The behaviour of the Business Messages is fully described by the Business Transaction and the structure of the Business Messages is fully described by the Message Definitions and related Message Rules, Rules and Market Practices. All of which are registered in the ISO 20022 Repository. A single new Business Message (with its accompagnying business application header) is created - by the sending MessagingEndpoint - for each business event; that is each interaction in a Business Transaction. A Business Message adheres to the following principles: " A Business Message (and its business application header) must not contain information about the Message Transport System or the mechanics or mechanism of message sending, transportation, or receipt. " A Business Message must be comprehensible outside of the context of the Transport Message. That is the Business Message must not require knowledge of the Transport Message to be understood. " A Business Message may contain headers, footers, and envelopes that are meaningful for the business. When present, they are treated as any other message content, which means that they are considered part of the Message Definition of the Business Message and as such will be part of the ISO 20022 Repository. " A Business Message refers to Business Actors by their Name. Each instance of a Business Actor has one Name. The Business Actor must not be referred to in the Transport Layer. Specific usage of this BusinessMessageHeader may be defined by the relevant SEG.
Message Construction
Every ISO20022 message has at the highest level what we call ‘building blocks’. Because the message is constructed as immutable records, the association is by composition. Below you can see the relationship between the message and its constituent building blocks: For comparison, see the ISO20022 official specification
classDiagram direction LR %% BusinessApplicationHeaderV01 recursion level 0 with max 0 class BusinessApplicationHeaderV01{ CharacterSet UnicodeChartsCode BusinessMessageIdentifier IsoMax35Text MessageDefinitionIdentifier IsoMax35Text BusinessService IsoMax35Text CreationDate IsoISONormalisedDateTime CopyDuplicate CopyDuplicate1Code PossibleDuplicate IsoYesNoIndicator Priority BusinessMessagePriorityCode } BusinessApplicationHeaderV01 *-- "1..1" IParty9Choice : From BusinessApplicationHeaderV01 *-- "1..1" IParty9Choice : To BusinessApplicationHeaderV01 *-- "0..1" IsoSignatureEnvelope : Signature BusinessApplicationHeaderV01 *-- "0..1" BusinessApplicationHeader1 : Related
Now, we will zero-in one-by-one on each of these building blocks.
CharacterSet building block
Contains the character set of the text-based elements used in the Business Message. codelist containing the names of the UNICODE code block name as specified on http://unicode.org/Public/UNIDATA/Blocks.txt. For comparison, see the ISO20022 official specification This message is declared as UnicodeChartsCode in the ISO specification. In our implementation, it is represented in source code as UnicodeChartsCode. Due to global using directives, it is treated as a System.String by the compiler and runtime.
From building block
The sending MessagingEndpoint that has created this Business Message for the receiving MessagingEndpoint that will process this Business Message.
Note the sending MessagingEndpoint might be different from the sending address potentially contained in the transport header (as defined in the transport layer). Identification of a person, an organisation or a financial institution. For comparison, see the ISO20022 official specification
classDiagram direction tb %% IParty9Choice recursion level 0 with max 1
Party9Choice members
Member name | Description | Data Type / Multiplicity |
---|
To building block
The MessagingEndpoint designated by the sending MessagingEndpoint to be the recipient who will ultimately process this Business Message.
Note the receiving MessagingEndpoint might be different from the receiving address potentially contained in the transport header (as defined in the transport layer). Identification of a person, an organisation or a financial institution. For comparison, see the ISO20022 official specification
classDiagram direction tb %% IParty9Choice recursion level 0 with max 1
Party9Choice members
Member name | Description | Data Type / Multiplicity |
---|
BusinessMessageIdentifier building block
Unambiguously identifies the Business Message to the MessagingEndpoint that has created the Business Message. Specifies a character string with a maximum length of 35 characters. For comparison, see the ISO20022 official specification This message is declared as Max35Text in the ISO specification. In our implementation, it is represented in source code as IsoMax35Text. Due to global using directives, it is treated as a System.String by the compiler and runtime.
MessageDefinitionIdentifier building block
Contains the MessageIdentifier that defines the BusinessMessage. It must contain a MessageIdentifier published on the ISO 20022 website.
example camt.001.001.03. Specifies a character string with a maximum length of 35 characters. For comparison, see the ISO20022 official specification This message is declared as Max35Text in the ISO specification. In our implementation, it is represented in source code as IsoMax35Text. Due to global using directives, it is treated as a System.String by the compiler and runtime.
BusinessService building block
Specifies the business service agreed between the two MessagingEndpoints under which rules this Business Message is exchanged. To be used when there is a choice of processing services or processing service levels. Example: E&I. Specifies a character string with a maximum length of 35 characters. For comparison, see the ISO20022 official specification This message is declared as Max35Text in the ISO specification. In our implementation, it is represented in source code as IsoMax35Text. Due to global using directives, it is treated as a System.String by the compiler and runtime.
CreationDate building block
Date and time when this Business Message (header) was created. Note Times must be normalized, using the “Z” annotation. an ISODateTime whereby all timezoned dateTime values are UTC. For comparison, see the ISO20022 official specification This message is declared as ISONormalisedDateTime in the ISO specification. In our implementation, it is represented in source code as IsoISONormalisedDateTime. Due to global using directives, it is treated as a System.DateTime by the compiler and runtime.
CopyDuplicate building block
Indicates whether the message is a Copy, a Duplicate or a copy of a duplicate of a previously sent ISO 20022 Message. Specifies if this document is a copy, a duplicate, or a duplicate of a copy. For comparison, see the ISO20022 official specification This message is declared as CopyDuplicate1Code in the ISO specification. In our implementation, it is represented in source code as CopyDuplicate1Code. Due to global using directives, it is treated as a System.String by the compiler and runtime.
PossibleDuplicate building block
Flag indicating if the Business Message exchanged between the MessagingEndpoints is possibly a duplicate. If the receiving MessagingEndpoint did not receive the original, then this Business Message should be processed as if it were the original.
If the receiving MessagingEndpoint did receive the original, then it should perform necessary actions to avoid processing this Business Message again.
This will guarantee business idempotent behaviour.
NOTE: this is named “PossResend” in FIX - this is an application level resend not a network level retransmission. Indicates a “Yes” or “No” type of answer for an element. For comparison, see the ISO20022 official specification This message is declared as YesNoIndicator in the ISO specification. In our implementation, it is represented in source code as IsoYesNoIndicator. Due to global using directives, it is treated as a System.String by the compiler and runtime.
Priority building block
Relative indication of the processing precedence of the message over a (set of) Business Messages with assigned priorities. Specifies the priority levels for the BusinessMessage. The different priorities are typically user / service / implementation dependent. The semantics of the different values for a Mesage (Set) need to be defined by the relevant user community (SEG.). For comparison, see the ISO20022 official specification This message is declared as BusinessMessagePriorityCode in the ISO specification. In our implementation, it is represented in source code as BusinessMessagePriorityCode. Due to global using directives, it is treated as a System.String by the compiler and runtime.
Signature building block
Contains the digital signature of the Business Entity authorised to sign this Business Message. The W3C XML Schema that specifies following standard signature: XML Signature Syntax and Processing (Second Edition) W3C Recommendation 10 June 2008 http://www.w3.org/TR/2008/REC-xmldsig-core-20080610/. For comparison, see the ISO20022 official specification
classDiagram direction tb %% IsoSignatureEnvelope recursion level 0 with max 1
SignatureEnvelope members
Member name | Description | Data Type / Multiplicity |
---|
Related building block
Specifies the Business Application Header of the Business Message to which this Business Message relates. Can be used when replying to a query; can also be used when canceling or amending. Specifies the Business Application Header of the Business Message. Can be used when replying to a query; can also be used when canceling or amending. For comparison, see the ISO20022 official specification
classDiagram direction tb %% BusinessApplicationHeader1 recursion level 0 with max 1 class BusinessApplicationHeader1{ CharacterSet UnicodeChartsCode BusinessMessageIdentifier IsoMax35Text MessageDefinitionIdentifier IsoMax35Text BusinessService IsoMax35Text CreationDate IsoISONormalisedDateTime CopyDuplicate CopyDuplicate1Code PossibleDuplicate IsoYesNoIndicator Priority BusinessMessagePriorityCode } BusinessApplicationHeader1 *-- "1..1" IParty9Choice : From BusinessApplicationHeader1 *-- "1..1" IParty9Choice : To BusinessApplicationHeader1 *-- "0..1" IsoSignatureEnvelope : Signature %% IParty9Choice recursion level 1 with max 1 %% IParty9Choice recursion level 1 with max 1 %% IsoSignatureEnvelope recursion level 1 with max 1
BusinessApplicationHeader1 members
Member name | Description | Data Type / Multiplicity |
---|---|---|
CharacterSet | Contains the character set of the text-based elements used in the Business Message. | UnicodeChartsCode - Optional 0..1 |
From | The sending MessagingEndpoint that has created this Business Message for the receiving MessagingEndpoint that will process this Business Message. Note the sending MessagingEndpoint might be different from the sending address potentially contained in the transport header (as defined in the transport layer). | IParty9Choice - Required 1..1 |
To | The MessagingEndpoint designated by the sending MessagingEndpoint to be the recipient who will ultimately process this Business Message. Note the receiving MessagingEndpoint might be different from the receiving address potentially contained in the transport header (as defined in the transport layer). | IParty9Choice - Required 1..1 |
BusinessMessageIdentifier | Unambiguously identifies the Business Message to the MessagingEndpoint that has created the Business Message. | IsoMax35Text - Required 1..1 |
MessageDefinitionIdentifier | Contains the MessageIdentifier that defines the BusinessMessage. It must contain a MessageIdentifier published on the ISO 20022 website. example camt.001.001.03. | IsoMax35Text - Required 1..1 |
BusinessService | Specifies the business service agreed between the two MessagingEndpoints under which rules this Business Message is exchanged. To be used when there is a choice of processing services or processing service levels. Example: E&I. | IsoMax35Text - Optional 0..1 |
CreationDate | Date and time when this Business Message (header) was created. Note Times must be normalized, using the “Z” annotation. | IsoISONormalisedDateTime - Required 1..1 |
CopyDuplicate | Indicates whether the message is a Copy, a Duplicate or a copy of a duplicate of a previously sent ISO 20022 Message. | CopyDuplicate1Code - Optional 0..1 |
PossibleDuplicate | Flag indicating if the Business Message exchanged between the MessagingEndpoints is possibly a duplicate. If the receiving MessagingEndpoint did not receive the original, then this Business Message should be processed as if it were the original. If the receiving MessagingEndpoint did receive the original, then it should perform necessary actions to avoid processing this Business Message again. This will guarantee business idempotent behaviour. NOTE: this is named “PossResend” in FIX - this is an application level resend not a network level retransmission. | IsoYesNoIndicator - Optional 0..1 |
Priority | Relative indication of the processing precedence of the message over a (set of) Business Messages with assigned priorities. | BusinessMessagePriorityCode - Optional 0..1 |
Signature | Contains the digital signature of the Business Entity authorised to sign this Business Message. | IsoSignatureEnvelope - Optional 0..1 |
Extensibility and generalization considerations
To facilitate generalized design patterns in the system, the BusinessApplicationHeaderV01 implementation follows a specific implementaiton pattern. First of all, BusinessApplicationHeaderV01 impleemnts IOuterRecord indicating it is the outermost logical part of the message definition. Like all message wrappers, BusinessApplicationHeaderV01Document implements IOuterDocument. Because BusinessApplicationHeaderV01 implements IOuterDocument, it is a suitable template parameter for IOuterDocument, and causes the internal ‘Message’ to be of type BusinessApplicationHeaderV01.
classDiagram class IOuterRecord BusinessApplicationHeaderV01 --|> IOuterRecord : Implements BusinessApplicationHeaderV01Document --|> IOuterDocument~BusinessApplicationHeaderV01~ : Implements class IOuterDocument~BusinessApplicationHeaderV01~ { BusinessApplicationHeaderV01 Message }
Document wrapper for serialization
The only real purpose BusinessApplicationHeaderV01Document serves is to cause the document to be serialized into the ‘urn:iso:std:iso:20022:tech:xsd:head.001.001.01’ namespace. Therefore, it will probably be the usual practice to build the message and construct this wrapper at the last minute using BusinessApplicationHeaderV01.ToDocument() method. The returned BusinessApplicationHeaderV01Document value will serialize correctly according to ISO 20022 standards.
classDiagram BusinessApplicationHeaderV01Document *-- BusinessApplicationHeaderV01 : Document
Sample of message format
This is an abbreviated version of what the message should look like.
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.01">
<AppHdr>
<CharSet>
<!-- CharacterSet inner content -->
</CharSet>
<Fr>
<!-- From inner content -->
</Fr>
<To>
<!-- To inner content -->
</To>
<BizMsgIdr>
<!-- BusinessMessageIdentifier inner content -->
</BizMsgIdr>
<MsgDefIdr>
<!-- MessageDefinitionIdentifier inner content -->
</MsgDefIdr>
<BizSvc>
<!-- BusinessService inner content -->
</BizSvc>
<CreDt>
<!-- CreationDate inner content -->
</CreDt>
<CpyDplct>
<!-- CopyDuplicate inner content -->
</CpyDplct>
<PssblDplct>
<!-- PossibleDuplicate inner content -->
</PssblDplct>
<Prty>
<!-- Priority inner content -->
</Prty>
<Sgntr>
<!-- Signature inner content -->
</Sgntr>
<Rltd>
<!-- Related inner content -->
</Rltd>
</AppHdr>
</Document>
Data from ISO specification
This is the technical data from the specification document.
<messageDefinition
xmi:id="_qJyPQtFHEd-BzquC8wXy7w_1346744518"
nextVersions="_6wX5Uch7Eei73Ywzx0CAAg"
name="BusinessApplicationHeaderV01"
definition="The Business Layer deals with Business Messages. The behaviour of the Business Messages is fully described by the Business Transaction and the structure of the Business Messages is fully described by the Message Definitions and related Message Rules, Rules and Market Practices. All of which are registered in the ISO 20022 Repository.
A single new Business Message (with its accompagnying business application header) is created - by the sending MessagingEndpoint - for each business event; that is each interaction in a Business Transaction. A Business Message adheres to the following principles:
" A Business Message (and its business application header) must not contain information about the Message Transport System or the mechanics or mechanism of message sending, transportation, or receipt. 
" A Business Message must be comprehensible outside of the context of the Transport Message. That is the Business Message must not require knowledge of the Transport Message to be understood.
" A Business Message may contain headers, footers, and envelopes that are meaningful for the business. When present, they are treated as any other message content, which means that they are considered part of the Message Definition of the Business Message and as such will be part of the ISO 20022 Repository.
" A Business Message refers to Business Actors by their Name. Each instance of a Business Actor has one Name. The Business Actor must not be referred to in the Transport Layer.
Specific usage of this BusinessMessageHeader may be defined by the relevant SEG."
registrationStatus="Registered"
messageSet="_urpIICeJEeOCeO5e7islRQ _LXjAoE5QEeqUWMKO7k5sCQ"
xmlTag="AppHdr"
rootElement="Document"
xmlns:xmi="http://www.omg.org/XMI">
<constraint
xmi:id="_qJ8AR9FHEd-BzquC8wXy7w_1100124326"
nextVersions="_6wX5U8h7Eei73Ywzx0CAAg"
name="RelatedPresentWhenCopyDupl"
definition="Related MUST contain the relevant BusinessMessageHeader elements of the BusinessMessage to which this BusinessMessage relates.

If CopyDuplicate is present, then Related MUST be present."
registrationStatus="Provisionally Registered"
expression="<RuleDefinition><ComplexRule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ComplexRule"><mustBe><connector>AND</connector><BooleanRule xsi:type="Presence"><leftOperand>/Related</leftOperand></BooleanRule></mustBe><onCondition><connector>AND</connector><BooleanRule xsi:type="Presence"><leftOperand>/CopyDuplicate</leftOperand></BooleanRule></onCondition></ComplexRule></RuleDefinition>" />
<messageBuildingBlock
xmi:id="_qJyPQ9FHEd-BzquC8wXy7w_474795999"
nextVersions="_6wX5Vch7Eei73Ywzx0CAAg"
name="CharacterSet"
definition="Contains the character set of the text-based elements used in the Business Message."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="0"
xmlTag="CharSet"
simpleType="_YghNkNp-Ed-ak6NoX_4Aeg_728068642" />
<messageBuildingBlock
xmi:id="_qJyPRNFHEd-BzquC8wXy7w_-123343718"
nextVersions="_6wX5V8h7Eei73Ywzx0CAAg"
name="From"
definition="The sending MessagingEndpoint that has created this Business Message for the receiving MessagingEndpoint that will process this Business Message.

Note	the sending MessagingEndpoint might be different from the sending address potentially contained in the transport header (as defined in the transport layer)."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="1"
xmlTag="Fr"
complexType="_PW59stp-Ed-ak6NoX_4Aeg_2024378743" />
<messageBuildingBlock
xmi:id="_qJyPRdFHEd-BzquC8wXy7w_-148352244"
nextVersions="_6wX5Wch7Eei73Ywzx0CAAg"
name="To"
definition="The MessagingEndpoint designated by the sending MessagingEndpoint to be the recipient who will ultimately process this Business Message.

Note the receiving MessagingEndpoint might be different from the receiving address potentially contained in the transport header (as defined in the transport layer)."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="1"
xmlTag="To"
complexType="_PW59stp-Ed-ak6NoX_4Aeg_2024378743" />
<messageBuildingBlock
xmi:id="_qJyPRtFHEd-BzquC8wXy7w_1978492942"
nextVersions="_6wX5W8h7Eei73Ywzx0CAAg"
name="BusinessMessageIdentifier"
definition="Unambiguously identifies the Business Message to the MessagingEndpoint that has created the Business Message."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="1"
xmlTag="BizMsgIdr"
simpleType="_YW1tKdp-Ed-ak6NoX_4Aeg_1913463446" />
<messageBuildingBlock
xmi:id="_qJyPR9FHEd-BzquC8wXy7w_-176162321"
nextVersions="_6wX5Xch7Eei73Ywzx0CAAg"
name="MessageDefinitionIdentifier"
definition="Contains the MessageIdentifier that defines the BusinessMessage.
It must contain a MessageIdentifier published on the ISO 20022 website.

example	camt.001.001.03."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="1"
xmlTag="MsgDefIdr"
simpleType="_YW1tKdp-Ed-ak6NoX_4Aeg_1913463446" />
<messageBuildingBlock
xmi:id="_qJ8AQNFHEd-BzquC8wXy7w_-1566891032"
nextVersions="_6wX5X8h7Eei73Ywzx0CAAg"
name="BusinessService"
definition="Specifies the business service agreed between the two MessagingEndpoints under which rules this Business Message is exchanged.
 To be used when there is a choice of processing services or processing service levels.
Example: E&I."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="0"
xmlTag="BizSvc"
simpleType="_YW1tKdp-Ed-ak6NoX_4Aeg_1913463446" />
<messageBuildingBlock
xmi:id="_qJ8AQdFHEd-BzquC8wXy7w_218642822"
nextVersions="_6wX5Ych7Eei73Ywzx0CAAg"
name="CreationDate"
definition="Date and time when this Business Message (header) was created.
Note Times must be normalized, using the "Z" annotation."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="1"
xmlTag="CreDt"
simpleType="_YWPQN9p-Ed-ak6NoX_4Aeg_-842130097" />
<messageBuildingBlock
xmi:id="_qJ8AQtFHEd-BzquC8wXy7w_483261909"
nextVersions="_6wX5Y8h7Eei73Ywzx0CAAg"
name="CopyDuplicate"
definition="Indicates whether the message is a Copy, a Duplicate or a copy of a duplicate of a previously sent ISO 20022 Message."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="0"
xmlTag="CpyDplct"
simpleType="_bCWRI9p-Ed-ak6NoX_4Aeg_-462671342" />
<messageBuildingBlock
xmi:id="_qJ8AQ9FHEd-BzquC8wXy7w_-659356211"
nextVersions="_6wX5Zch7Eei73Ywzx0CAAg"
name="PossibleDuplicate"
definition="Flag indicating if the Business Message exchanged between the MessagingEndpoints is possibly a duplicate. 
If the receiving MessagingEndpoint did not receive the original, then this Business Message should be processed as if it were the original. 

If the receiving MessagingEndpoint did receive the original, then it should perform necessary actions to avoid processing this Business Message again.

This will guarantee business idempotent behaviour.

NOTE: this is named "PossResend" in FIX - this is an application level resend not a network level retransmission."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="0"
xmlTag="PssblDplct"
simpleType="_YXbjA9p-Ed-ak6NoX_4Aeg_-2040117978" />
<messageBuildingBlock
xmi:id="_qJ8ARNFHEd-BzquC8wXy7w_-797565634"
nextVersions="_6wX5Z8h7Eei73Ywzx0CAAg"
name="Priority"
definition="Relative indication of the processing precedence of the message over a (set of) Business Messages with assigned priorities."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="0"
xmlTag="Prty"
simpleType="_Ybm4ZNp-Ed-ak6NoX_4Aeg_1557209084" />
<messageBuildingBlock
xmi:id="_qJ8ARdFHEd-BzquC8wXy7w_983060799"
nextVersions="_6wX5ach7Eei73Ywzx0CAAg"
name="Signature"
definition="Contains the digital signature of the Business Entity authorised to sign this Business Message."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="0"
xmlTag="Sgntr"
complexType="_O-3vQKYkEeS0NIlWNmtQyw" />
<messageBuildingBlock
xmi:id="_qJ8ARtFHEd-BzquC8wXy7w_732677776"
nextVersions="_6wX5a8h7Eei73Ywzx0CAAg"
name="Related"
definition="Specifies the Business Application Header of the Business Message to which this Business Message relates.
Can be used when replying to a query; can also be used when canceling or amending."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="0"
xmlTag="Rltd"
complexType="_QnrCBdp-Ed-ak6NoX_4Aeg_2082653882" />
<messageDefinitionIdentifier
businessArea="head"
messageFunctionality="001"
flavour="001"
version="01" />
</messageDefinition>
ISO Building Blocks
The following items are used as building blocks to construct this message.