FinancialInvoiceV01

tsin.004.001.01

Scope The FinancialInvoice message is used to support the provision of financial and related services where there is a requirement to exchange invoice information. Usage While the prime function of the FinancialInvoice message is as a request from the seller to the buyer for payment, the FinancialInvoice message can also serve to evidence an invoice in support of a financial service such as invoice factoring, letters of credit, and bank payment obligations, to enable Web based services such as electronic bill payment and presentment, and as the basis to transfer invoice information via third parties such as e-invoicing service providers. A consequence of the receipt of an invoice by the buyer is that it acts as a trigger for the use of related messages that are already defined in ISO 20022, notably where the information contained in the Financial Invoice enables payment for the goods or services received, and/or is provided in support of a request for invoice financing. While certain of these related messages, such as the CreditTransfer and PaymentInitiation messages, are shown in the sequence diagram they are out of scope. They are shown only to illustrate a given scenario and to place the invoice in the context of the financial banking processes that might be conducted between different financial institutions. The use of self-billing by the buyer to the seller, where the buyer acts as the invoice issuer or the process of handling an incorrect invoice, is not in scope.

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
%% FinancialInvoiceV01 recursion level 0 with max 0
FinancialInvoiceV01 *-- "1..1" InvoiceHeader1 : InvoiceHeader
FinancialInvoiceV01 *-- "1..1" TradeAgreement6 : TradeAgreement
FinancialInvoiceV01 *-- "1..1" TradeDelivery1 : TradeDelivery
FinancialInvoiceV01 *-- "1..1" TradeSettlement1 : TradeSettlement
FinancialInvoiceV01 *-- "0..1" LineItem10 : LineItem
  

Now, we will zero-in one-by-one on each of these building blocks.

InvoiceHeader building block

Collection of data that is exchanged between two or more parties in written, printed or electronic form. It contains general data relevant to the main body of the invoice such as date of issue, currency code and identification number. Collection of data for that is exchanged between two or more parties in written, printed or electronic form. For comparison, see the ISO20022 official specification

classDiagram
   direction tb
%% InvoiceHeader1 recursion level 0 with max 1
class InvoiceHeader1{
    Identification IsoMax35Text
    TypeCode ExternalDocumentType1Code
    Name IsoMax35Text
    IssueDateTime IsoISODateTime
    LanguageCode LanguageCode
    CopyIndicator IsoYesNoIndicator
    DocumentPurpose ExternalDocumentPurpose1Code
}
InvoiceHeader1 *-- "0..1" TradeParty1 : Issuer
InvoiceHeader1 *-- "0..0" AdditionalInformation6 : IncludedNote
%% TradeParty1 recursion level 1 with max 1
TradeParty1 *-- "1..1" PartyIdentification45 : PartyIdentification
TradeParty1 *-- "0..1" LegalOrganisation1 : LegalOrganisation
TradeParty1 *-- "0..0" TaxParty3 : TaxParty
%% AdditionalInformation6 recursion level 1 with max 1
class AdditionalInformation6{
    InformationType ExternalInformationType1Code
    InformationValue IsoMax350Text
}
  

InvoiceHeader1 members

Member name Description Data Type / Multiplicity
Identification Unique identification of this invoice document. IsoMax35Text - Required 1..1
TypeCode Specifies the type of the document, for example commercial invoice. ExternalDocumentType1Code - Required 1..1
Name Name of invoice document or transaction, for example, tax invoice. IsoMax35Text - Unknown 0..0
IssueDateTime Issue date of the document. IsoISODateTime - Required 1..1
Issuer Party that issued this invoice document. TradeParty1 - Optional 0..1
LanguageCode Unique identifier for a language used in this invoice document. LanguageCode - Optional 0..1
CopyIndicator Indicator that the document is a copy of the original document.
DocumentPurpose Specifies the function of the document. ExternalDocumentPurpose1Code - Optional 0..1
IncludedNote Note included in this invoice document. AdditionalInformation6 - Unknown 0..0

TradeAgreement building block

Commercial information such as terms of commerce, parties, and documentation, related to the trading agreement under which this invoice is issued. Contractual details related to the agreement between parties. For comparison, see the ISO20022 official specification

classDiagram
   direction tb
%% TradeAgreement6 recursion level 0 with max 1
TradeAgreement6 *-- "1..1" TradeParty1 : Buyer
TradeAgreement6 *-- "1..1" TradeParty1 : Seller
TradeAgreement6 *-- "0..1" DocumentIdentification22 : QuotationDocumentIdentification
TradeAgreement6 *-- "0..1" DocumentIdentification22 : ContractDocumentIdentification
TradeAgreement6 *-- "0..1" DocumentIdentification22 : BuyerOrderIdentificationDocument
TradeAgreement6 *-- "0..0" DocumentGeneralInformation2 : AdditionalReferenceDocument
TradeAgreement6 *-- "0..1" Incoterms3 : Incoterms
%% TradeParty1 recursion level 1 with max 1
TradeParty1 *-- "1..1" PartyIdentification45 : PartyIdentification
TradeParty1 *-- "0..1" LegalOrganisation1 : LegalOrganisation
TradeParty1 *-- "0..0" TaxParty3 : TaxParty
%% TradeParty1 recursion level 1 with max 1
TradeParty1 *-- "1..1" PartyIdentification45 : PartyIdentification
TradeParty1 *-- "0..1" LegalOrganisation1 : LegalOrganisation
TradeParty1 *-- "0..0" TaxParty3 : TaxParty
%% DocumentIdentification22 recursion level 1 with max 1
class DocumentIdentification22{
    Identification IsoMax35Text
    DateOfIssue IsoISODate
}
%% DocumentIdentification22 recursion level 1 with max 1
class DocumentIdentification22{
    Identification IsoMax35Text
    DateOfIssue IsoISODate
}
%% DocumentIdentification22 recursion level 1 with max 1
class DocumentIdentification22{
    Identification IsoMax35Text
    DateOfIssue IsoISODate
}
%% DocumentGeneralInformation2 recursion level 1 with max 1
class DocumentGeneralInformation2{
    DocumentType ExternalDocumentType1Code
    DocumentNumber IsoMax35Text
    SenderReceiverSequenceIdentification IsoMax140Text
    IssueDate IsoISODate
    URL IsoMax256Text
}
DocumentGeneralInformation2 *-- "0..0" BinaryFile1 : AttachedBinaryFile
%% Incoterms3 recursion level 1 with max 1
class Incoterms3{
    Location IsoMax35Text
}
Incoterms3 *-- "1..1" IIncoterms4Choice : IncotermsCode
  

TradeAgreement6 members

Member name Description Data Type / Multiplicity
Buyer Party that is specified as the buyer for this trade agreement. TradeParty1 - Required 1..1
Seller Party that is specified as the seller for this trade agreement. TradeParty1 - Required 1..1
QuotationDocumentIdentification Quotation document referenced from this trade agreement. DocumentIdentification22 - Optional 0..1
ContractDocumentIdentification Contract document referenced from this trade agreement. DocumentIdentification22 - Optional 0..1
BuyerOrderIdentificationDocument Buyer order document referenced from this trade agreement. DocumentIdentification22 - Optional 0..1
AdditionalReferenceDocument Additional document referenced from this trade agreement. DocumentGeneralInformation2 - Unknown 0..0
Incoterms Specifies the applicable Incoterm and associated location. Incoterms3 - Optional 0..1

TradeDelivery building block

Supply chain shipping arrangements for delivery of invoiced products and/or services. Specifies how the supply chain shipping arrangements and the delivery of products and/or services as well as related documentation. For comparison, see the ISO20022 official specification

classDiagram
   direction tb
%% TradeDelivery1 recursion level 0 with max 1
class TradeDelivery1{
    DeliveryDateTime IsoISODateTime
}
TradeDelivery1 *-- "0..1" Period1 : DeliveryPeriod
TradeDelivery1 *-- "0..1" TradeParty1 : ShipFrom
TradeDelivery1 *-- "0..1" TradeParty1 : ShipTo
TradeDelivery1 *-- "0..1" TradeParty1 : UltimateShipTo
TradeDelivery1 *-- "0..1" DocumentIdentification22 : DeliveryNote
TradeDelivery1 *-- "0..0" Consignment2 : Consignment
%% Period1 recursion level 1 with max 1
Period1 *-- "1..1" IDateFormat4Choice : StartDate
Period1 *-- "1..1" IDateFormat4Choice : EndDate
%% TradeParty1 recursion level 1 with max 1
TradeParty1 *-- "1..1" PartyIdentification45 : PartyIdentification
TradeParty1 *-- "0..1" LegalOrganisation1 : LegalOrganisation
TradeParty1 *-- "0..0" TaxParty3 : TaxParty
%% TradeParty1 recursion level 1 with max 1
TradeParty1 *-- "1..1" PartyIdentification45 : PartyIdentification
TradeParty1 *-- "0..1" LegalOrganisation1 : LegalOrganisation
TradeParty1 *-- "0..0" TaxParty3 : TaxParty
%% TradeParty1 recursion level 1 with max 1
TradeParty1 *-- "1..1" PartyIdentification45 : PartyIdentification
TradeParty1 *-- "0..1" LegalOrganisation1 : LegalOrganisation
TradeParty1 *-- "0..0" TaxParty3 : TaxParty
%% DocumentIdentification22 recursion level 1 with max 1
class DocumentIdentification22{
    Identification IsoMax35Text
    DateOfIssue IsoISODate
}
%% Consignment2 recursion level 1 with max 1
Consignment2 *-- "0..1" TradeParty1 : Consignor
Consignment2 *-- "0..1" TradeParty1 : Consignee
Consignment2 *-- "0..0" TransportMeans3 : TransportMeans
  

TradeDelivery1 members

Member name Description Data Type / Multiplicity
DeliveryPeriod Actual delivery period of the products and/or services. Period1 - Optional 0..1
DeliveryDateTime Actual delivery date/time of the products and/or services. IsoISODateTime - Optional 0..1
ShipFrom Party from whom the goods are dispatched. TradeParty1 - Optional 0..1
ShipTo Party to whom the goods are dispatched. TradeParty1 - Optional 0..1
UltimateShipTo Final party to whom the goods are dispatched. TradeParty1 - Optional 0..1
DeliveryNote Delivery note related to the delivery of the products and/or services. DocumentIdentification22 - Optional 0..1
Consignment Physical consolidation of goods for transport. Consignment2 - Unknown 0..0

TradeSettlement building block

Settlement information that enables the financial reconciliation and payment of this invoice.

Trade settlement details for this invoice which involves the payment of an outstanding debt, account, or charge. For comparison, see the ISO20022 official specification

classDiagram
   direction tb
%% TradeSettlement1 recursion level 0 with max 1
class TradeSettlement1{
    DuePayableAmount IsoCurrencyAndAmount
    PaymentReference IsoMax35Text
    InvoiceCurrencyCode CurrencyCode
    IssuerFactoringListIdentification IsoMax35Text
    IssuerFactoringAgreementIdentification IsoMax35Text
}
TradeSettlement1 *-- "0..0" CreditorReferenceInformation2 : CreditorReference
TradeSettlement1 *-- "0..1" TradeParty1 : Invoicer
TradeSettlement1 *-- "0..1" TradeParty1 : Invoicee
TradeSettlement1 *-- "0..1" TradeParty1 : Payee
TradeSettlement1 *-- "0..1" TradeParty1 : Payer
TradeSettlement1 *-- "0..1" CurrencyReference2 : TaxCurrencyExchange
TradeSettlement1 *-- "0..1" CurrencyReference2 : InvoiceCurrencyExchange
TradeSettlement1 *-- "0..1" CurrencyReference2 : PaymentCurrencyExchange
TradeSettlement1 *-- "0..0" PaymentMeans1 : PaymentMeans
TradeSettlement1 *-- "0..0" SettlementTax1 : Tax
TradeSettlement1 *-- "0..1" Period1 : BillingPeriod
TradeSettlement1 *-- "0..0" SettlementAllowanceCharge1 : AllowanceCharge
TradeSettlement1 *-- "0..0" SettlementSubTotalCalculatedTax1 : SubTotalCalculatedTax
TradeSettlement1 *-- "0..0" ChargesDetails2 : LogisticsCharge
TradeSettlement1 *-- "0..0" PaymentTerms3 : PaymentTerms
TradeSettlement1 *-- "1..1" SettlementMonetarySummation1 : MonetarySummation
TradeSettlement1 *-- "0..0" DocumentAdjustment2 : AdjustmentAmountAndReason
TradeSettlement1 *-- "0..1" DocumentIdentification22 : InvoiceReferencedDocument
TradeSettlement1 *-- "0..1" DocumentIdentification22 : ProformaInvoiceReferencedDocument
TradeSettlement1 *-- "0..1" DocumentIdentification7 : LetterOfCreditReferencedDocument
TradeSettlement1 *-- "0..0" FinancialCard1 : FinancialCard
TradeSettlement1 *-- "0..0" AccountingAccount1 : PurchaseAccountingAccount
%% CreditorReferenceInformation2 recursion level 1 with max 1
class CreditorReferenceInformation2{
    Reference IsoMax35Text
}
CreditorReferenceInformation2 *-- "0..1" CreditorReferenceType2 : Type
%% TradeParty1 recursion level 1 with max 1
TradeParty1 *-- "1..1" PartyIdentification45 : PartyIdentification
TradeParty1 *-- "0..1" LegalOrganisation1 : LegalOrganisation
TradeParty1 *-- "0..0" TaxParty3 : TaxParty
%% TradeParty1 recursion level 1 with max 1
TradeParty1 *-- "1..1" PartyIdentification45 : PartyIdentification
TradeParty1 *-- "0..1" LegalOrganisation1 : LegalOrganisation
TradeParty1 *-- "0..0" TaxParty3 : TaxParty
%% TradeParty1 recursion level 1 with max 1
TradeParty1 *-- "1..1" PartyIdentification45 : PartyIdentification
TradeParty1 *-- "0..1" LegalOrganisation1 : LegalOrganisation
TradeParty1 *-- "0..0" TaxParty3 : TaxParty
%% TradeParty1 recursion level 1 with max 1
TradeParty1 *-- "1..1" PartyIdentification45 : PartyIdentification
TradeParty1 *-- "0..1" LegalOrganisation1 : LegalOrganisation
TradeParty1 *-- "0..0" TaxParty3 : TaxParty
%% CurrencyReference2 recursion level 1 with max 1
class CurrencyReference2{
    TargetCurrency CurrencyCode
    SourceCurrency CurrencyCode
}
CurrencyReference2 *-- "0..0" ExchangeRateInformation1 : ExchangeRateInformation
%% CurrencyReference2 recursion level 1 with max 1
class CurrencyReference2{
    TargetCurrency CurrencyCode
    SourceCurrency CurrencyCode
}
CurrencyReference2 *-- "0..0" ExchangeRateInformation1 : ExchangeRateInformation
%% CurrencyReference2 recursion level 1 with max 1
class CurrencyReference2{
    TargetCurrency CurrencyCode
    SourceCurrency CurrencyCode
}
CurrencyReference2 *-- "0..0" ExchangeRateInformation1 : ExchangeRateInformation
%% PaymentMeans1 recursion level 1 with max 1
class PaymentMeans1{
    PaymentMethodCode PaymentMethod4Code
}
PaymentMeans1 *-- "1..1" PaymentTypeInformation19 : PaymentType
PaymentMeans1 *-- "1..1" CashAccount16 : PayeeCreditorAccount
PaymentMeans1 *-- "1..1" BranchAndFinancialInstitutionIdentification4 : PayeeFinancialInstitution
PaymentMeans1 *-- "0..1" CashAccount16 : PayerDebtorAccount
PaymentMeans1 *-- "0..1" BranchAndFinancialInstitutionIdentification4 : PayerFinancialInstitution
%% SettlementTax1 recursion level 1 with max 1
class SettlementTax1{
    CalculatedAmount IsoCurrencyAndAmount
    BasisAmount IsoCurrencyAndAmount
    TaxPointDate IsoISODate
}
SettlementTax1 *-- "0..1" ITaxTypeFormat1Choice : TypeCode
%% Period1 recursion level 1 with max 1
Period1 *-- "1..1" IDateFormat4Choice : StartDate
Period1 *-- "1..1" IDateFormat4Choice : EndDate
%% SettlementAllowanceCharge1 recursion level 1 with max 1
class SettlementAllowanceCharge1{
    AllowanceChargeIndicator IsoYesNoIndicator
    ActualAmount IsoCurrencyAndAmount
}
SettlementAllowanceCharge1 *-- "0..1" IDiscountOrChargeType1Choice : Reason
%% SettlementSubTotalCalculatedTax1 recursion level 1 with max 1
class SettlementSubTotalCalculatedTax1{
    TypeCode IsoMax4Text
    CategoryCode IsoMax4Text
    CalculatedAmount IsoCurrencyAndAmount
    BasisAmount IsoCurrencyAndAmount
    CalculatedRate IsoPercentageRate
}
SettlementSubTotalCalculatedTax1 *-- "0..1" TaxExemptionReason1 : ExemptionReason
%% ChargesDetails2 recursion level 1 with max 1
class ChargesDetails2{
    Type ChargeType8Code
    OtherChargesType IsoMax35Text
    Amount IsoCurrencyAndAmount
}
%% PaymentTerms3 recursion level 1 with max 1
class PaymentTerms3{
    DueDate IsoISODate
    Description IsoMax140Text
    PartialPaymentPercent IsoPercentageRate
    DirectDebitMandateIdentification IsoMax35Text
    DiscountAmount IsoCurrencyAndAmount
    DiscountPercentRate IsoPercentageRate
    DiscountBasisAmount IsoCurrencyAndAmount
    PenaltyAmount IsoCurrencyAndAmount
    PenaltyPercentRate IsoPercentageRate
    PenaltyBasisAmount IsoCurrencyAndAmount
}
PaymentTerms3 *-- "0..1" PaymentPeriod1 : PaymentPeriod
%% SettlementMonetarySummation1 recursion level 1 with max 1
class SettlementMonetarySummation1{
    LineTotalAmount IsoCurrencyAndAmount
    AllowanceTotalAmount IsoCurrencyAndAmount
    TotalDiscountAmount IsoCurrencyAndAmount
    ChargeTotalAmount IsoCurrencyAndAmount
    TotalPrepaidAmount IsoCurrencyAndAmount
    TaxTotalAmount IsoCurrencyAndAmount
    TaxBasisAmount IsoCurrencyAndAmount
    RoundingAmount IsoCurrencyAndAmount
    GrandTotalAmount IsoCurrencyAndAmount
    InformationAmount IsoCurrencyAndAmount
}
%% DocumentAdjustment2 recursion level 1 with max 1
class DocumentAdjustment2{
    Amount IsoActiveOrHistoricCurrencyAndAmount
    CreditDebitIndicator CreditDebitCode
    Reason IsoMax4Text
    AdditionalInformation IsoMax140Text
}
%% DocumentIdentification22 recursion level 1 with max 1
class DocumentIdentification22{
    Identification IsoMax35Text
    DateOfIssue IsoISODate
}
%% DocumentIdentification22 recursion level 1 with max 1
class DocumentIdentification22{
    Identification IsoMax35Text
    DateOfIssue IsoISODate
}
%% DocumentIdentification7 recursion level 1 with max 1
class DocumentIdentification7{
    Identification IsoMax35Text
    DateOfIssue IsoISODate
}
%% FinancialCard1 recursion level 1 with max 1
class FinancialCard1{
    CreditLimitAmount IsoCurrencyAndAmount
    CreditAvailableAmount IsoCurrencyAndAmount
    InterestRatePercent IsoPercentageRate
}
%% AccountingAccount1 recursion level 1 with max 1
class AccountingAccount1{
    Identification IsoMax35Text
    CostReferencePattern IsoMax35Text
}
  

TradeSettlement1 members

Member name Description Data Type / Multiplicity
DuePayableAmount Monetary value that is an exact amount due and payable, such as the amount due to the creditor. IsoCurrencyAndAmount - Unknown 0..0
CreditorReference Unique and unambiguous reference assigned by the creditor. CreditorReferenceInformation2 - Unknown 0..0
PaymentReference Unique and unambiguous identifier for a payment transaction, as assigned by the originator. The payment transaction reference is used for reconciliation or to link tasks relating to the payment transaction. IsoMax35Text - Unknown 0..0
InvoiceCurrencyCode Code specifying the currency of the invoice. CurrencyCode - Optional 0..1
Invoicer Organization issuing the invoice. TradeParty1 - Optional 0..1
Invoicee Party to whom the invoice was issued. TradeParty1 - Optional 0..1
Payee Party specified to receive payment for the invoice. TradeParty1 - Optional 0..1
Payer Party specified to initiate payment for the invoice. TradeParty1 - Optional 0..1
TaxCurrencyExchange Currency exchange applicable to a tax. CurrencyReference2 - Optional 0..1
InvoiceCurrencyExchange Currency exchange applicable to the invoice. CurrencyReference2 - Optional 0..1
PaymentCurrencyExchange Currency exchange applicable to the payment. CurrencyReference2 - Optional 0..1
PaymentMeans Means of payment (for example, credit transfer, cheque, money order, or credit card) specified to initiate payment of the invoice. PaymentMeans1 - Unknown 0..0
Tax Amount of money due to the government or tax authority, according to various pre-defined parameters such as thresholds or income. SettlementTax1 - Unknown 0..0
BillingPeriod Specifies the applicable billing period. Period1 - Optional 0..1
AllowanceCharge Allowance or charge specified. SettlementAllowanceCharge1 - Unknown 0..0
SubTotalCalculatedTax Tax subtotal calculated. SettlementSubTotalCalculatedTax1 - Unknown 0..0
LogisticsCharge Logistics service charge specified. ChargesDetails2 - Unknown 0..0
PaymentTerms Payment terms. PaymentTerms3 - Unknown 0..0
MonetarySummation Monetary totals specified for the invoice. SettlementMonetarySummation1 - Required 1..1
AdjustmentAmountAndReason Financial adjustment specified. DocumentAdjustment2 - Unknown 0..0
InvoiceReferencedDocument Invoice document referenced. DocumentIdentification22 - Optional 0..1
ProformaInvoiceReferencedDocument Pro-forma invoice document referenced. DocumentIdentification22 - Optional 0..1
LetterOfCreditReferencedDocument Letter of credit document referenced. DocumentIdentification7 - Optional 0..1
FinancialCard Financial card specified. The card is used to represent a financial account for the purpose of payment settlement. FinancialCard1 - Unknown 0..0
PurchaseAccountingAccount Specific purchase account for recording debits and credits for accounting purposes. AccountingAccount1 - Unknown 0..0
IssuerFactoringListIdentification Factoring list document referenced. IsoMax35Text - Unknown 0..0
IssuerFactoringAgreementIdentification Factoring agreement document referenced. IsoMax35Text - Unknown 0..0

LineItem building block

Unit of information in this invoice showning the related provision of products and/or services and monetary summations reported as a discrete line item.

Unit of information showing the related provision of products and/or services and monetary summations reported as a discrete line items. For comparison, see the ISO20022 official specification

classDiagram
   direction tb
%% LineItem10 recursion level 0 with max 1
class LineItem10{
    Identification IsoMax35Text
    NetPrice IsoCurrencyAndAmount
    GrossPrice IsoCurrencyAndAmount
    PackageQuantity IsoDecimalNumber
    MeasureDateTimeStart IsoISODateTime
    MeasureDateTimeEnd IsoISODateTime
    DeliveryDateTime IsoISODateTime
}
LineItem10 *-- "0..1" TradeProduct1 : TradeProduct
LineItem10 *-- "0..1" DocumentIdentification23 : BuyerOrderIdentification
LineItem10 *-- "0..1" DocumentIdentification22 : ContractIdentification
LineItem10 *-- "0..0" AccountingAccount1 : PurchaseAccountingAccount
LineItem10 *-- "0..1" Quantity4 : NetPriceQuantity
LineItem10 *-- "0..0" LineItemAllowanceCharge1 : NetPriceAllowanceCharge
LineItem10 *-- "0..1" Quantity3 : NetWeight
LineItem10 *-- "0..1" Quantity4 : GrossPriceQuantity
LineItem10 *-- "0..1" Quantity3 : GrossWeight
LineItem10 *-- "0..0" ChargesDetails2 : LogisticsCharge
LineItem10 *-- "0..0" LineItemTax1 : Tax
LineItem10 *-- "0..0" LineItemAllowanceCharge1 : AllowanceCharge
LineItem10 *-- "0..0" Adjustment4 : FinancialAdjustment
LineItem10 *-- "0..1" Quantity3 : BilledQuantity
LineItem10 *-- "0..1" Quantity3 : PerPackageUnitQuantity
LineItem10 *-- "0..0" Packaging1 : Packaging
LineItem10 *-- "0..1" Quantity3 : ChargeFreeQuantity
LineItem10 *-- "0..1" Quantity3 : MeasureQuantityStart
LineItem10 *-- "0..1" Quantity3 : MeasureQuantityEnd
LineItem10 *-- "0..1" TradeParty1 : ShipTo
LineItem10 *-- "0..1" Incoterms3 : Incoterms
LineItem10 *-- "0..1" DocumentIdentification22 : DeliveryNoteIdentification
LineItem10 *-- "0..1" LineItemMonetarySummation1 : MonetarySummation
LineItem10 *-- "0..0" AdditionalInformation1 : IncludedNote
%% TradeProduct1 recursion level 1 with max 1
class TradeProduct1{
    Name IsoMax35Text
    Description IsoMax140Text
    GlobalSerialIdentifier IsoMax35Text
}
TradeProduct1 *-- "0..0" IProductIdentifier2Choice : Identification
TradeProduct1 *-- "0..0" CountryCodeAndName1 : CountryOfOrigin
TradeProduct1 *-- "0..0" ProductCharacteristics2 : ProductCharacteristics
TradeProduct1 *-- "0..0" IProductCategory1Choice : ProductCategory
%% DocumentIdentification23 recursion level 1 with max 1
class DocumentIdentification23{
    Identification IsoMax35Text
    DateOfIssue IsoISODate
    OrderLineIdentification IsoMax35Text
}
%% DocumentIdentification22 recursion level 1 with max 1
class DocumentIdentification22{
    Identification IsoMax35Text
    DateOfIssue IsoISODate
}
%% AccountingAccount1 recursion level 1 with max 1
class AccountingAccount1{
    Identification IsoMax35Text
    CostReferencePattern IsoMax35Text
}
%% Quantity4 recursion level 1 with max 1
class Quantity4{
    UnitOfMeasureCode UnitOfMeasure4Code
    OtherUnitOfMeasure IsoMax35Text
    Value IsoDecimalNumber
    Factor IsoMax15NumericText
}
%% LineItemAllowanceCharge1 recursion level 1 with max 1
class LineItemAllowanceCharge1{
    ChargeIndicator IsoYesNoIndicator
    ActualAmount IsoCurrencyAndAmount
    CalculationPercent IsoPercentageRate
    SequenceNumber IsoNumber
}
LineItemAllowanceCharge1 *-- "0..1" Quantity3 : BasisQuantity
LineItemAllowanceCharge1 *-- "0..1" IDiscountOrChargeType1Choice : Reason
%% Quantity3 recursion level 1 with max 1
class Quantity3{
    UnitOfMeasureCode UnitOfMeasure4Code
    OtherUnitOfMeasure IsoMax35Text
    Value IsoDecimalNumber
}
%% Quantity4 recursion level 1 with max 1
class Quantity4{
    UnitOfMeasureCode UnitOfMeasure4Code
    OtherUnitOfMeasure IsoMax35Text
    Value IsoDecimalNumber
    Factor IsoMax15NumericText
}
%% Quantity3 recursion level 1 with max 1
class Quantity3{
    UnitOfMeasureCode UnitOfMeasure4Code
    OtherUnitOfMeasure IsoMax35Text
    Value IsoDecimalNumber
}
%% ChargesDetails2 recursion level 1 with max 1
class ChargesDetails2{
    Type ChargeType8Code
    OtherChargesType IsoMax35Text
    Amount IsoCurrencyAndAmount
}
%% LineItemTax1 recursion level 1 with max 1
class LineItemTax1{
    CalculatedAmount IsoCurrencyAndAmount
    TaxPointDate IsoISODate
    CalculatedRate IsoPercentageRate
    CategoryCode IsoMax4Text
    CategoryName IsoMax35Text
}
LineItemTax1 *-- "0..1" ITaxTypeFormat1Choice : TypeCode
%% LineItemAllowanceCharge1 recursion level 1 with max 1
class LineItemAllowanceCharge1{
    ChargeIndicator IsoYesNoIndicator
    ActualAmount IsoCurrencyAndAmount
    CalculationPercent IsoPercentageRate
    SequenceNumber IsoNumber
}
LineItemAllowanceCharge1 *-- "0..1" Quantity3 : BasisQuantity
LineItemAllowanceCharge1 *-- "0..1" IDiscountOrChargeType1Choice : Reason
%% Adjustment4 recursion level 1 with max 1
class Adjustment4{
    Type AdjustmentType2Code
    OtherAdjustmentType IsoMax35Text
    Direction AdjustmentDirection1Code
    Amount IsoCurrencyAndAmount
}
%% Quantity3 recursion level 1 with max 1
class Quantity3{
    UnitOfMeasureCode UnitOfMeasure4Code
    OtherUnitOfMeasure IsoMax35Text
    Value IsoDecimalNumber
}
%% Quantity3 recursion level 1 with max 1
class Quantity3{
    UnitOfMeasureCode UnitOfMeasure4Code
    OtherUnitOfMeasure IsoMax35Text
    Value IsoDecimalNumber
}
%% Packaging1 recursion level 1 with max 1
class Packaging1{
    Type ExternalPackagingType1Code
    Name IsoMax35Text
}
%% Quantity3 recursion level 1 with max 1
class Quantity3{
    UnitOfMeasureCode UnitOfMeasure4Code
    OtherUnitOfMeasure IsoMax35Text
    Value IsoDecimalNumber
}
%% Quantity3 recursion level 1 with max 1
class Quantity3{
    UnitOfMeasureCode UnitOfMeasure4Code
    OtherUnitOfMeasure IsoMax35Text
    Value IsoDecimalNumber
}
%% Quantity3 recursion level 1 with max 1
class Quantity3{
    UnitOfMeasureCode UnitOfMeasure4Code
    OtherUnitOfMeasure IsoMax35Text
    Value IsoDecimalNumber
}
%% TradeParty1 recursion level 1 with max 1
TradeParty1 *-- "1..1" PartyIdentification45 : PartyIdentification
TradeParty1 *-- "0..1" LegalOrganisation1 : LegalOrganisation
TradeParty1 *-- "0..0" TaxParty3 : TaxParty
%% Incoterms3 recursion level 1 with max 1
class Incoterms3{
    Location IsoMax35Text
}
Incoterms3 *-- "1..1" IIncoterms4Choice : IncotermsCode
%% DocumentIdentification22 recursion level 1 with max 1
class DocumentIdentification22{
    Identification IsoMax35Text
    DateOfIssue IsoISODate
}
%% LineItemMonetarySummation1 recursion level 1 with max 1
class LineItemMonetarySummation1{
    LineTotalAmount IsoCurrencyAndAmount
    AllowanceTotalAmount IsoCurrencyAndAmount
    ChargeTotalAmount IsoCurrencyAndAmount
    TaxTotalAmount IsoCurrencyAndAmount
    TaxBasisTotalAmount IsoCurrencyAndAmount
    InformationAmount IsoCurrencyAndAmount
}
%% AdditionalInformation1 recursion level 1 with max 1
class AdditionalInformation1{
    InformationValue IsoMax350Text
}
AdditionalInformation1 *-- "1..1" IInformationType1Choice : InformationType
  

LineItem10 members

Member name Description Data Type / Multiplicity
Identification The unique identification of this invoice line item. IsoMax35Text - Optional 0..1
TradeProduct Something that is produced and sold as the result of an industrial process. TradeProduct1 - Optional 0..1
BuyerOrderIdentification Purchase order reference assigned by the buyer related to the provision of products and/or services for this line item. DocumentIdentification23 - Optional 0..1
ContractIdentification Contract reference related to the provision of products and/or services for this line item. DocumentIdentification22 - Optional 0..1
PurchaseAccountingAccount Specific purchase account for recording debits and credits for accounting purposes. AccountingAccount1 - Unknown 0..0
NetPrice Value of the price, eg, as a currency and value. IsoCurrencyAndAmount - Unknown 0..0
NetPriceQuantity Quantity and conversion factor on which the net price is based for this line item product and/or service. Quantity4 - Optional 0..1
NetPriceAllowanceCharge Allowance or charge applied to the net price. LineItemAllowanceCharge1 - Unknown 0..0
NetWeight Net weight of the product. Quantity3 - Optional 0..1
GrossPrice Gross price of the product and/or service. IsoCurrencyAndAmount - Unknown 0..0
GrossPriceQuantity Quantity and conversion factor on which the gross price is based for this line item product and/or service. Quantity4 - Optional 0..1
GrossWeight Gross weight of the product. Quantity3 - Optional 0..1
LogisticsCharge Logistics service charge for this line item. ChargesDetails2 - Unknown 0..0
Tax Amount of money due to the government or tax authority, according to various pre-defined parameters such as thresholds or income. LineItemTax1 - Unknown 0..0
AllowanceCharge Allowance or charge specified for this line item. LineItemAllowanceCharge1 - Unknown 0..0
FinancialAdjustment Modification on the value of goods and / or services. For example: rebate, discount, surcharge. Adjustment4 - Unknown 0..0
BilledQuantity Quantity billed for this line item. Quantity3 - Optional 0..1
PackageQuantity Number of product packages delivered. IsoDecimalNumber - Optional 0..1
PerPackageUnitQuantity Number of units per package in this line item for a supply chain trade delivery. Quantity3 - Optional 0..1
Packaging Physical packaging of the product. Packaging1 - Unknown 0..0
ChargeFreeQuantity Quantity that is free of charge for this line item. Quantity3 - Optional 0..1
MeasureQuantityStart Quantity value on which the quantity measurement started for a line item. For instance the start amount of a meter reading for an electricity supplier. Quantity3 - Optional 0..1
MeasureQuantityEnd Quantity value on which the quantity measurement ended for a line item. For instance the end amount of a meter reading for an electricity supplier. Quantity3 - Optional 0..1
MeasureDateTimeStart Date/time on which the clock time measure started for a line item. IsoISODateTime - Optional 0..1
MeasureDateTimeEnd Date/time on which the clock time measure ended for a line item. IsoISODateTime - Optional 0..1
ShipTo Party to whom the goods must be delivered in the end. TradeParty1 - Optional 0..1
Incoterms Specifies the applicable Incoterm and associated location. Incoterms3 - Optional 0..1
DeliveryDateTime Actual delivery date/time of the products and/or services for this line item. IsoISODateTime - Optional 0..1
DeliveryNoteIdentification Delivery note related to the delivery of the products and/or services for this line item. DocumentIdentification22 - Optional 0..1
MonetarySummation Monetary totals for this line item. LineItemMonetarySummation1 - Optional 0..1
IncludedNote Note included in this line item. AdditionalInformation1 - Unknown 0..0

Extensibility and generalization considerations

To facilitate generalized design patterns in the system, the FinancialInvoiceV01 implementation follows a specific implementaiton pattern. First of all, FinancialInvoiceV01 impleemnts IOuterRecord indicating it is the outermost logical part of the message definition. Like all message wrappers, FinancialInvoiceV01Document implements IOuterDocument. Because FinancialInvoiceV01 implements IOuterDocument, it is a suitable template parameter for IOuterDocument, and causes the internal ‘Message’ to be of type FinancialInvoiceV01.

classDiagram
    class IOuterRecord
    FinancialInvoiceV01 --|> IOuterRecord : Implements
    FinancialInvoiceV01Document --|> IOuterDocument~FinancialInvoiceV01~ : Implements
    class IOuterDocument~FinancialInvoiceV01~ {
        FinancialInvoiceV01 Message
     }
  

Document wrapper for serialization

The only real purpose FinancialInvoiceV01Document serves is to cause the document to be serialized into the ‘urn:iso:std:iso:20022:tech:xsd:tsin.004.001.01’ namespace. Therefore, it will probably be the usual practice to build the message and construct this wrapper at the last minute using FinancialInvoiceV01.ToDocument() method. The returned FinancialInvoiceV01Document value will serialize correctly according to ISO 20022 standards.

classDiagram
    FinancialInvoiceV01Document *-- FinancialInvoiceV01 : 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.004.001.01">
    <FinInvc>
        <InvcHdr>
            <!-- InvoiceHeader inner content -->
        </InvcHdr>
        <TradAgrmt>
            <!-- TradeAgreement inner content -->
        </TradAgrmt>
        <TradDlvry>
            <!-- TradeDelivery inner content -->
        </TradDlvry>
        <TradSttlm>
            <!-- TradeSettlement inner content -->
        </TradSttlm>
        <LineItm>
            <!-- LineItem inner content -->
        </LineItm>
    </FinInvc>
</Document>

Data from ISO specification

This is the technical data from the specification document.

<messageDefinition
  xmi:id="_BU_0In1LEeCF8NjrBemJWQ_-1866907401"
  name="FinancialInvoiceV01"
  definition="Scope&#xD;&#xA;The FinancialInvoice message is used to support the provision of financial and related services where there is a requirement to exchange invoice information.&#xD;&#xA;Usage&#xD;&#xA;While the prime function of the FinancialInvoice message is as a request from the seller to the buyer for payment, the FinancialInvoice message can also serve to evidence an invoice in support of a financial service such as invoice factoring, letters of credit, and bank payment obligations, to enable Web based services such as electronic bill payment and presentment, and as the basis to transfer invoice information via third parties such as e-invoicing service providers.&#xD;&#xA;A consequence of the receipt of an invoice by the buyer is that it acts as a trigger for the use of related messages that are already defined in ISO 20022, notably where the information contained in the Financial Invoice enables payment for the goods or services received, and/or is provided in support of a request for invoice financing. While certain of these related messages, such as the CreditTransfer and PaymentInitiation messages, are shown in the sequence diagram they are out of scope. They are shown only to illustrate a given scenario and to place the invoice in the context of the financial banking processes that might be conducted between different financial institutions.&#xD;&#xA;The use of self-billing by the buyer to the seller, where the buyer acts as the invoice issuer or the process of handling an incorrect invoice, is not in scope."
  registrationStatus="Registered"
  messageSet="_wRx2yU2rEeG_I4xRYCA_7g"
  xmlTag="FinInvc"
  rootElement="Document"
  xmlns:xmi="http://www.omg.org/XMI">
  <messageBuildingBlock
    xmi:id="_BU_0I31LEeCF8NjrBemJWQ_-1198026434"
    name="InvoiceHeader"
    definition="Collection of data that is exchanged between two or more parties in written, printed or electronic form. It contains general data relevant to the main body of the invoice such as date of issue, currency code and identification number."
    registrationStatus="Provisionally Registered"
    maxOccurs="1"
    minOccurs="1"
    xmlTag="InvcHdr"
    complexType="_SuAjMAEcEeCQm6a_G2yO_w_-887541899" />
  <messageBuildingBlock
    xmi:id="_BU_0JH1LEeCF8NjrBemJWQ_-1506571269"
    name="TradeAgreement"
    definition="Commercial information such as terms of commerce, parties, and documentation, related to the trading agreement under which this invoice is issued."
    registrationStatus="Provisionally Registered"
    maxOccurs="1"
    minOccurs="1"
    xmlTag="TradAgrmt"
    complexType="_S_vMYwEcEeCQm6a_G2yO_w_490060980" />
  <messageBuildingBlock
    xmi:id="_BU_0JX1LEeCF8NjrBemJWQ_-1892382855"
    name="TradeDelivery"
    definition="Supply chain shipping arrangements for delivery of invoiced products and/or services."
    registrationStatus="Provisionally Registered"
    maxOccurs="1"
    minOccurs="1"
    xmlTag="TradDlvry"
    complexType="_S5CHjgEcEeCQm6a_G2yO_w_-1855522854" />
  <messageBuildingBlock
    xmi:id="_BU_0Jn1LEeCF8NjrBemJWQ_1308887526"
    name="TradeSettlement"
    definition="Settlement information that enables the financial reconciliation and payment of this invoice.&#xD;&#xA;"
    registrationStatus="Provisionally Registered"
    maxOccurs="1"
    minOccurs="1"
    xmlTag="TradSttlm"
    complexType="_TB-BBQEcEeCQm6a_G2yO_w_1181239925" />
  <messageBuildingBlock
    xmi:id="_BU_0J31LEeCF8NjrBemJWQ_-1744265877"
    name="LineItem"
    definition="Unit of information in this invoice showning the related provision of products and/or services and monetary summations reported as a discrete line item.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;"
    registrationStatus="Provisionally Registered"
    minOccurs="0"
    xmlTag="LineItm"
    complexType="_SuJtLAEcEeCQm6a_G2yO_w_-1957014618" />
  <messageDefinitionIdentifier
    businessArea="tsin"
    messageFunctionality="004"
    flavour="001"
    version="01" />
</messageDefinition>

ISO Building Blocks

The following items are used as building blocks to construct this message.