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
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."
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.
"
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.


"
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.