UndertakingApplicationV01

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.