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.