tsin.005.001.01
The UndertakingApplication message is sent by the party requesting issuance of the undertaking (applicant or obligor) to the party issuing the undertaking. It is used to request the issuance of an undertaking (demand guarantee or standby letter of credit or suretyship) or counter-undertaking (counter-guarantee or counter-standby or suretyship), and provides details on the applicable rules, terms, conditions and content of the undertaking to be issued.
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
%% UndertakingApplicationV01 recursion level 0 with max 0
class UndertakingApplicationV01{
InstructionsToBank IsoMax2000Text
}
UndertakingApplicationV01 *-- "1..1" Undertaking1 : UndertakingApplicationDetails
UndertakingApplicationV01 *-- "0..1" PartyAndSignature2 : DigitalSignature
Now, we will zero-in one-by-one on each of these building blocks.
UndertakingApplicationDetails building block
Details of the application for an independent undertaking, such as a demand guarantee or standby letter of credit, that provides financial assurance, to be collected on the presentation of documents that comply with its terms and conditions. Independent undertaking, such as a demand guarantee or standby letter of credit, that provides financial assurance, to be honoured on the presentation of documents that comply with its terms and conditions. For comparison, see the ISO20022 official specification
classDiagram
direction tb
%% Undertaking1 recursion level 0 with max 1
class Undertaking1{
ApplicantReferenceNumber IsoMax35Text
Purpose IsoMax350Text
Name UndertakingName1Code
ConfirmationIndicator IsoYesNoIndicator
CounterUndertakingIndicator IsoYesNoIndicator
MultipleDemandIndicator IsoYesNoIndicator
PartialDemandIndicator IsoYesNoIndicator
TransferIndicator IsoYesNoIndicator
TransferChargesPayableBy ExternalTypeOfParty1Code
ConfirmationChargesPayableBy ExternalTypeOfParty1Code
AdditionalApplicationInformation IsoMax2000Text
}
Undertaking1 *-- "1..1" IUndertakingType1Choice : Type
Undertaking1 *-- "1..1" PartyIdentification43 : Obligor
Undertaking1 *-- "0..0" PartyIdentification43 : Applicant
Undertaking1 *-- "1..1" PartyIdentification43 : Issuer
Undertaking1 *-- "1..0" PartyIdentification43 : Beneficiary
Undertaking1 *-- "0..1" PartyIdentification43 : AdvisingParty
Undertaking1 *-- "0..1" PartyIdentification43 : SecondAdvisingParty
Undertaking1 *-- "0..1" PartyIdentification43 : Confirmer
Undertaking1 *-- "0..1" Undertaking2 : CounterUndertaking
Undertaking1 *-- "1..1" UndertakingAmount1 : UndertakingAmount
Undertaking1 *-- "1..1" ExpiryDetails2 : ExpiryDetails
Undertaking1 *-- "0..0" PartyAndType1 : AdditionalParty
Undertaking1 *-- "1..1" GovernanceRules1 : GovernanceRulesAndLaw
Undertaking1 *-- "0..0" UnderlyingTradeTransaction1 : UnderlyingTransaction
Undertaking1 *-- "0..1" Presentation4 : PresentationDetails
Undertaking1 *-- "1..1" UndertakingWording1 : UndertakingWording
Undertaking1 *-- "0..0" AutomaticVariation1 : AutomaticAmountVariation
Undertaking1 *-- "1..1" CommunicationChannel1 : DeliveryChannel
Undertaking1 *-- "0..1" CashAccount28 : ObligorLiabilityAccount
Undertaking1 *-- "0..1" CashAccount28 : ObligorChargeAccount
Undertaking1 *-- "0..1" CashAccount28 : ObligorSettlementAccount
Undertaking1 *-- "0..0" Document9 : EnclosedFile
%% IUndertakingType1Choice recursion level 1 with max 1
%% PartyIdentification43 recursion level 1 with max 1
class PartyIdentification43{
Name IsoMax140Text
CountryOfResidence CountryCode
}
PartyIdentification43 *-- "0..1" PostalAddress6 : PostalAddress
PartyIdentification43 *-- "0..1" IParty11Choice : Identification
PartyIdentification43 *-- "0..1" ContactDetails2 : ContactDetails
%% PartyIdentification43 recursion level 1 with max 1
class PartyIdentification43{
Name IsoMax140Text
CountryOfResidence CountryCode
}
PartyIdentification43 *-- "0..1" PostalAddress6 : PostalAddress
PartyIdentification43 *-- "0..1" IParty11Choice : Identification
PartyIdentification43 *-- "0..1" ContactDetails2 : ContactDetails
%% PartyIdentification43 recursion level 1 with max 1
class PartyIdentification43{
Name IsoMax140Text
CountryOfResidence CountryCode
}
PartyIdentification43 *-- "0..1" PostalAddress6 : PostalAddress
PartyIdentification43 *-- "0..1" IParty11Choice : Identification
PartyIdentification43 *-- "0..1" ContactDetails2 : ContactDetails
%% PartyIdentification43 recursion level 1 with max 1
class PartyIdentification43{
Name IsoMax140Text
CountryOfResidence CountryCode
}
PartyIdentification43 *-- "0..1" PostalAddress6 : PostalAddress
PartyIdentification43 *-- "0..1" IParty11Choice : Identification
PartyIdentification43 *-- "0..1" ContactDetails2 : ContactDetails
%% PartyIdentification43 recursion level 1 with max 1
class PartyIdentification43{
Name IsoMax140Text
CountryOfResidence CountryCode
}
PartyIdentification43 *-- "0..1" PostalAddress6 : PostalAddress
PartyIdentification43 *-- "0..1" IParty11Choice : Identification
PartyIdentification43 *-- "0..1" ContactDetails2 : ContactDetails
%% PartyIdentification43 recursion level 1 with max 1
class PartyIdentification43{
Name IsoMax140Text
CountryOfResidence CountryCode
}
PartyIdentification43 *-- "0..1" PostalAddress6 : PostalAddress
PartyIdentification43 *-- "0..1" IParty11Choice : Identification
PartyIdentification43 *-- "0..1" ContactDetails2 : ContactDetails
%% PartyIdentification43 recursion level 1 with max 1
class PartyIdentification43{
Name IsoMax140Text
CountryOfResidence CountryCode
}
PartyIdentification43 *-- "0..1" PostalAddress6 : PostalAddress
PartyIdentification43 *-- "0..1" IParty11Choice : Identification
PartyIdentification43 *-- "0..1" ContactDetails2 : ContactDetails
%% Undertaking2 recursion level 1 with max 1
class Undertaking2{
Name UndertakingName1Code
ConfirmationChargesPayableBy ExternalTypeOfParty1Code
StandardClaimDocumentIndicator IsoYesNoIndicator
AdditionalInformation IsoMax2000Text
}
Undertaking2 *-- "0..1" PartyIdentification43 : Beneficiary
Undertaking2 *-- "0..1" ExpiryDetails2 : ExpiryDetails
Undertaking2 *-- "0..1" UndertakingAmount1 : CounterUndertakingAmount
Undertaking2 *-- "0..1" GovernanceRules1 : GovernanceRulesAndLaw
%% UndertakingAmount1 recursion level 1 with max 1
class UndertakingAmount1{
Amount IsoActiveCurrencyAndAmount
PlusTolerance IsoPercentageRate
AdditionalInformation IsoMax2000Text
}
%% ExpiryDetails2 recursion level 1 with max 1
class ExpiryDetails2{
AdditionalExpiryInformation IsoMax2000Text
}
ExpiryDetails2 *-- "0..1" ExpiryTerms2 : ExpiryTerms
%% PartyAndType1 recursion level 1 with max 1
PartyAndType1 *-- "1..1" IPartyType1Choice : Type
PartyAndType1 *-- "0..1" PartyIdentification43 : Party
%% GovernanceRules1 recursion level 1 with max 1
GovernanceRules1 *-- "1..1" IGovernanceIdentification1Choice : RuleIdentification
GovernanceRules1 *-- "0..1" Location1 : ApplicableLaw
GovernanceRules1 *-- "0..0" Location1 : Jurisdiction
%% UnderlyingTradeTransaction1 recursion level 1 with max 1
class UnderlyingTradeTransaction1{
Identification IsoMax35Text
TransactionDate IsoISODate
TenderClosingDate IsoISODate
TransactionAmount IsoActiveCurrencyAndAmount
ContractAmountPercentage IsoPercentageRate
AdditionalInformation IsoMax2000Text
}
UnderlyingTradeTransaction1 *-- "1..1" IUnderlyingTradeTransactionType1Choice : Type
%% Presentation4 recursion level 1 with max 1
class Presentation4{
AdditionalInformation IsoMax2000Text
}
Presentation4 *-- "0..1" IPresentationMedium1Choice : Medium
Presentation4 *-- "0..0" Document11 : Document
%% UndertakingWording1 recursion level 1 with max 1
class UndertakingWording1{
RequestedWordingLanguage ISO2ALanguageCode
}
UndertakingWording1 *-- "0..1" ModelFormIdentification1 : ModelForm
UndertakingWording1 *-- "0..0" Narrative1 : UndertakingTermsAndConditions
%% AutomaticVariation1 recursion level 1 with max 1
class AutomaticVariation1{
Identification IsoMax35Text
Type VariationType1Code
AdditionalInformation IsoMax2000Text
}
AutomaticVariation1 *-- "1..0" AmountAndTrigger1 : AmountAndTrigger
%% CommunicationChannel1 recursion level 1 with max 1
class CommunicationChannel1{
Method ExternalChannel1Code
DeliverToName IsoMax140Text
}
CommunicationChannel1 *-- "1..1" IPartyType1Choice : DeliverToPartyType
CommunicationChannel1 *-- "0..1" PostalAddress6 : DeliverToAddress
%% CashAccount28 recursion level 1 with max 1
class CashAccount28{
Currency ActiveOrHistoricCurrencyCode
Name IsoMax70Text
}
CashAccount28 *-- "1..1" IAccountIdentification4Choice : Identification
%% CashAccount28 recursion level 1 with max 1
class CashAccount28{
Currency ActiveOrHistoricCurrencyCode
Name IsoMax70Text
}
CashAccount28 *-- "1..1" IAccountIdentification4Choice : Identification
%% CashAccount28 recursion level 1 with max 1
class CashAccount28{
Currency ActiveOrHistoricCurrencyCode
Name IsoMax70Text
}
CashAccount28 *-- "1..1" IAccountIdentification4Choice : Identification
%% Document9 recursion level 1 with max 1
class Document9{
Identification IsoMax35Text
Enclosure IsoMax2MBBinary
}
Document9 *-- "1..1" IUndertakingDocumentType1Choice : Type
Document9 *-- "0..1" IDocumentFormat1Choice : Format
Document9 *-- "0..1" PartyAndSignature2 : DigitalSignature
Undertaking1 members
| Member name | Description | Data Type / Multiplicity |
|---|---|---|
| ApplicantReferenceNumber | Unique and unambiguous identifier assigned by the applicant to the undertaking. | IsoMax35Text - Required 1..1 |
| Purpose | Brief description of the purpose of the undertaking. Provided as information for the issuer reference. | IsoMax350Text - Required 1..1 |
| Name | Undertaking name. | UndertakingName1Code - Required 1..1 |
| Type | Type of undertaking, for example, performance, payment. | IUndertakingType1Choice - Required 1..1 |
| Obligor | Party obligated to reimburse the issuer. | PartyIdentification43 - Required 1..1 |
| Applicant | Party to be named in the undertaking as the “applicant” when different from the obligor. | PartyIdentification43 - Unknown 0..0 |
| Issuer | Party that issues the undertaking (or counter-undertaking). | PartyIdentification43 - Required 1..1 |
| Beneficiary | Ultimate party in whose favour the undertaking is to be issued. | PartyIdentification43 - Unknown 1..0 |
| AdvisingParty | Party asked to advise the undertaking to the beneficiary or to another advising party. | PartyIdentification43 - Optional 0..1 |
| SecondAdvisingParty | Additional party asked to advise the undertaking. | PartyIdentification43 - Optional 0..1 |
| Confirmer | Party that adds its confirmation to the undertaking. For further clarification, reference the applicable rules to which the undertaking is subject. | PartyIdentification43 - Optional 0..1 |
| ConfirmationIndicator | Indicates whether the advising bank (confirmer) is requested to add its confirmation to the undertaking. The absence of this element indicates that the advising bank (confirmer) is not requested to add its confirmation to the undertaking. | IsoYesNoIndicator - Optional 0..1 |
| CounterUndertakingIndicator | Indicates whether the undertaking is a local or ancillary undertaking to be issued under a counter-undertaking. | IsoYesNoIndicator - Required 1..1 |
| CounterUndertaking | Details related to the counter undertaking. | Undertaking2 - Optional 0..1 |
| UndertakingAmount | Details related to the amount of the undertaking. | UndertakingAmount1 - Required 1..1 |
| ExpiryDetails | Details related to the expiry terms of the undertaking. | ExpiryDetails2 - Required 1..1 |
| AdditionalParty | Party, in addition to the other parties specified in the undertaking, that is also related to the undertaking. | PartyAndType1 - Unknown 0..0 |
| GovernanceRulesAndLaw | Rules and laws governing the undertaking. | GovernanceRules1 - Required 1..1 |
| UnderlyingTransaction | Details of the underlying transaction for which the undertaking is issued. | UnderlyingTradeTransaction1 - Unknown 0..0 |
| PresentationDetails | Presentation details related to the undertaking. | Presentation4 - Optional 0..1 |
| UndertakingWording | Wording details and text for the undertaking. | UndertakingWording1 - Required 1..1 |
| MultipleDemandIndicator | Indicates whether multiple demands are permitted. | IsoYesNoIndicator - Optional 0..1 |
| PartialDemandIndicator | Indicates whether partial demands/drawings are permitted. | IsoYesNoIndicator - Optional 0..1 |
| TransferIndicator | Indicates whether the undertaking is transferable. | IsoYesNoIndicator - Optional 0..1 |
| TransferChargesPayableBy | Indicates whether the applicant/obligor or beneficiary is responsible for payment of the transfer charges. | ExternalTypeOfParty1Code - Optional 0..1 |
| ConfirmationChargesPayableBy | Indicates whether the applicant/obligor or beneficiary is responsible for payment of the confirmation charges. | ExternalTypeOfParty1Code - Optional 0..1 |
| AutomaticAmountVariation | Details related to a variation in amount that is automatically applied. | AutomaticVariation1 - Unknown 0..0 |
| DeliveryChannel | Details of the communication channel. | CommunicationChannel1 - Required 1..1 |
| ObligorLiabilityAccount | Account nominated by the obligor to record the liability amount of the undertaking. | CashAccount28 - Optional 0..1 |
| ObligorChargeAccount | Account nominated by the obligor for the settlement of charges related to the undertaking. | CashAccount28 - Optional 0..1 |
| ObligorSettlementAccount | Account nominated by the obligor for the settlement of the amount claimed under the undertaking. | CashAccount28 - Optional 0..1 |
| EnclosedFile | Document or template enclosed in the undertaking directly related to the undertaking to be issued. | Document9 - Unknown 0..0 |
| AdditionalApplicationInformation | Additional information related to the application for an undertaking. | IsoMax2000Text - Collection 0..5 |
InstructionsToBank building block
Instructions specific to the bank receiving the message. Specifies a character string with a maximum length of 2000 characters. For comparison, see the ISO20022 official specification This message is declared as Max2000Text in the ISO specification. In our implementation, it is represented in source code as IsoMax2000Text. Due to global using directives, it is treated as a System.String by the compiler and runtime.
DigitalSignature building block
Digital signature of the undertaking application. Entity involved in an activity. For comparison, see the ISO20022 official specification
classDiagram
direction tb
%% PartyAndSignature2 recursion level 0 with max 1
PartyAndSignature2 *-- "1..1" PartyIdentification43 : Party
PartyAndSignature2 *-- "1..1" ProprietaryData3 : Signature
%% PartyIdentification43 recursion level 1 with max 1
class PartyIdentification43{
Name IsoMax140Text
CountryOfResidence CountryCode
}
PartyIdentification43 *-- "0..1" PostalAddress6 : PostalAddress
PartyIdentification43 *-- "0..1" IParty11Choice : Identification
PartyIdentification43 *-- "0..1" ContactDetails2 : ContactDetails
%% ProprietaryData3 recursion level 1 with max 1
ProprietaryData3 *-- "1..1" SkipProcessing : Any
PartyAndSignature2 members
| Member name | Description | Data Type / Multiplicity |
|---|---|---|
| Party | Entity involved in an activity. | PartyIdentification43 - Required 1..1 |
| Signature | Signature of a party. | ProprietaryData3 - Required 1..1 |
Extensibility and generalization considerations
To facilitate generalized design patterns in the system, the UndertakingApplicationV01 implementation follows a specific implementaiton pattern. First of all, UndertakingApplicationV01 impleemnts IOuterRecord indicating it is the outermost logical part of the message definition. Like all message wrappers, UndertakingApplicationV01Document implements IOuterDocument. Because UndertakingApplicationV01 implements IOuterDocument, it is a suitable template parameter for IOuterDocument, and causes the internal ‘Message’ to be of type UndertakingApplicationV01.
classDiagram
class IOuterRecord
UndertakingApplicationV01 --|> IOuterRecord : Implements
UndertakingApplicationV01Document --|> IOuterDocument~UndertakingApplicationV01~ : Implements
class IOuterDocument~UndertakingApplicationV01~ {
UndertakingApplicationV01 Message
}
Document wrapper for serialization
The only real purpose UndertakingApplicationV01Document serves is to cause the document to be serialized into the ‘urn:iso:std:iso:20022:tech:xsd:tsin.005.001.01’ namespace. Therefore, it will probably be the usual practice to build the message and construct this wrapper at the last minute using UndertakingApplicationV01.ToDocument() method. The returned UndertakingApplicationV01Document value will serialize correctly according to ISO 20022 standards.
classDiagram
UndertakingApplicationV01Document *-- UndertakingApplicationV01 : 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:tsin.005.001.01">
<UdrtkgAppl>
<UdrtkgApplDtls>
<!-- UndertakingApplicationDetails inner content -->
</UdrtkgApplDtls>
<InstrsToBk>
<!-- InstructionsToBank inner content -->
</InstrsToBk>
<DgtlSgntr>
<!-- DigitalSignature inner content -->
</DgtlSgntr>
</UdrtkgAppl>
</Document>
Data from ISO specification
This is the technical data from the specification document.
<messageDefinition
xmi:id="_9fRMkHltEeG7BsjMvd1mEw_980511566"
name="UndertakingApplicationV01"
definition="The UndertakingApplication message is sent by the party requesting issuance of the undertaking (applicant or obligor) to the party issuing the undertaking. It is used to request the issuance of an undertaking (demand guarantee or standby letter of credit or suretyship) or counter-undertaking (counter-guarantee or counter-standby or suretyship), and provides details on the applicable rules, terms, conditions and content of the undertaking to be issued."
registrationStatus="Registered"
messageSet="_SiMuI9n1EeGEPsbnW6ebrw"
xmlTag="UdrtkgAppl"
rootElement="Document"
xmlns:xmi="http://www.omg.org/XMI">
<messageBuildingBlock
xmi:id="_9fRMkXltEeG7BsjMvd1mEw_-1409870883"
name="UndertakingApplicationDetails"
definition="Details of the application for an independent undertaking, such as a demand guarantee or standby letter of credit, that provides financial assurance, to be collected on the presentation of documents that comply with its terms and conditions."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="1"
xmlTag="UdrtkgApplDtls"
complexType="_9ziMYXltEeG7BsjMvd1mEw_-2112761130" />
<messageBuildingBlock
xmi:id="__KBlo3_5EeGOn4dfTT_QdQ"
name="InstructionsToBank"
definition="Instructions specific to the bank receiving the message."
registrationStatus="Provisionally Registered"
maxOccurs="5"
minOccurs="0"
xmlTag="InstrsToBk"
simpleType="_YYn11dp-Ed-ak6NoX_4Aeg_2132907481" />
<messageBuildingBlock
xmi:id="_9fRMknltEeG7BsjMvd1mEw_-448392239"
name="DigitalSignature"
definition="Digital signature of the undertaking application."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="0"
xmlTag="DgtlSgntr"
complexType="_k4nFNZKuEeGnRMFvqYmPBQ" />
<messageDefinitionIdentifier
businessArea="tsin"
messageFunctionality="005"
flavour="001"
version="01" />
</messageDefinition>
ISO Building Blocks
The following items are used as building blocks to construct this message.