semt.024.001.01
Scope An account servicer sends a TotalPortfolioValuationReport to an account owner to provide detailed valuation information for a portfolio. Usage The TotalPortfolioValuationReport will be sent by the account servicer to the account owner on an agreed basis. The report may also be requested using a SecuritiesStatementQuery. The TotalPortfolioValuationReport is used to report on a portfolio without Investment Funds; or to report on a portfolio when an investment fund is regarded as a portfolio containing, only one or multiple investment funds The TotalPortfolioValuationReport may also be used to:
- re-send a message previously sent (the CopyDuplicate value is DUPL),
- provide a third party with a copy of a message for information (the CopyDuplicate value is COPY),
- re-send to a third party a copy of a message for information (the CopyDuplicate value is CODU).
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 %% TotalPortfolioValuationReportV01 recursion level 0 with max 0 TotalPortfolioValuationReportV01 *-- "1..1" Pagination : Pagination TotalPortfolioValuationReportV01 *-- "1..1" Report4 : ReportGeneralDetails TotalPortfolioValuationReportV01 *-- "1..1" SecuritiesAccount21 : AccountDetails TotalPortfolioValuationReportV01 *-- "1..1" TotalPortfolioValuation1 : TotalPortfolioValuation TotalPortfolioValuationReportV01 *-- "0..1" PortfolioBalance1 : Balance TotalPortfolioValuationReportV01 *-- "0..1" SupplementaryData1 : SupplementaryData
Now, we will zero-in one-by-one on each of these building blocks.
Pagination building block
Page number of the message (within the report) and continuation indicator to indicate that the report is to continue or that the message is the last page of the report. Number used to sequence pages when it is not possible for data to be conveyed in a single message and the data has to be split across several pages (messages). For comparison, see the ISO20022 official specification
classDiagram direction tb %% Pagination recursion level 0 with max 1 class Pagination{ PageNumber IsoMax5NumericText LastPageIndicator IsoYesNoIndicator }
Pagination members
Member name | Description | Data Type / Multiplicity |
---|---|---|
PageNumber | Page number. | IsoMax5NumericText - Required 1..1 |
LastPageIndicator | Indicates the last page. | IsoYesNoIndicator - Required 1..1 |
ReportGeneralDetails building block
General information related to the total portfolio valuation report. General characteristics of the report. For comparison, see the ISO20022 official specification
classDiagram direction tb %% Report4 recursion level 0 with max 1 class Report4{ ReportNumber IsoMax5NumericText QueryReference IsoMax35Text ReportIdentification IsoMax35Text AuditedIndicator IsoYesNoIndicator ActivityIndicator IsoYesNoIndicator } Report4 *-- "1..1" IDateAndDateTimeChoice : ReportDateTime Report4 *-- "0..1" IDateAndDateTimeChoice : CreationDateTime Report4 *-- "0..1" IDateAndDateTimeChoice : PreviousReportDateTime Report4 *-- "1..1" IFrequency8Choice : Frequency Report4 *-- "1..1" IUpdateType4Choice : UpdateType Report4 *-- "1..1" IStatementBasis6Choice : ReportBasis Report4 *-- "0..1" DatePeriodDetails : ReportPeriod Report4 *-- "0..1" IStatementSource1Choice : ReportSource %% IDateAndDateTimeChoice recursion level 1 with max 1 %% IDateAndDateTimeChoice recursion level 1 with max 1 %% IDateAndDateTimeChoice recursion level 1 with max 1 %% IFrequency8Choice recursion level 1 with max 1 %% IUpdateType4Choice recursion level 1 with max 1 %% IStatementBasis6Choice recursion level 1 with max 1 %% DatePeriodDetails recursion level 1 with max 1 class DatePeriodDetails{ FromDate IsoISODate ToDate IsoISODate } %% IStatementSource1Choice recursion level 1 with max 1
Report4 members
Member name | Description | Data Type / Multiplicity |
---|---|---|
ReportNumber | Sequential number of the report. | IsoMax5NumericText - Optional 0..1 |
QueryReference | Identification of the SecuritiesStatementQuery message sent to request this statement. | IsoMax35Text - Optional 0..1 |
ReportIdentification | Unique identification of the report. | IsoMax35Text - Optional 0..1 |
ReportDateTime | Date and time of the report. | IDateAndDateTimeChoice - Required 1..1 |
CreationDateTime | Preparation date and time of the report. | IDateAndDateTimeChoice - Optional 0..1 |
PreviousReportDateTime | Previous report date and time. | IDateAndDateTimeChoice - Optional 0..1 |
Frequency | Specifies the frequency of the report. | IFrequency8Choice - Required 1..1 |
UpdateType | Specifies whether the report is complete or contains changes only. | IUpdateType4Choice - Required 1..1 |
ReportBasis | Specifies the type of balance on which the report is prepared. | IStatementBasis6Choice - Required 1..1 |
ReportPeriod | Period for which the report is given. | DatePeriodDetails - Optional 0..1 |
ReportSource | Specifies the source of the report. | IStatementSource1Choice - Optional 0..1 |
AuditedIndicator | Indicates whether the report is audited or not. | IsoYesNoIndicator - Optional 0..1 |
ActivityIndicator | Indicates whether there is activity or an information update reported in the report. | IsoYesNoIndicator - Optional 0..1 |
AccountDetails building block
Details of the account. The account may represent an investment portfolio or a fund. Unambiguous identification for the account between the account owner and the account servicer. For comparison, see the ISO20022 official specification
classDiagram direction tb %% SecuritiesAccount21 recursion level 0 with max 1 class SecuritiesAccount21{ BaseCurrency ActiveOrHistoricCurrencyCode ReportingCurrency ActiveOrHistoricCurrencyCode ForeignExchangeRate IsoBaseOneRate } SecuritiesAccount21 *-- "1..1" AccountIdentification5 : Account SecuritiesAccount21 *-- "0..1" AccountIdentification5 : SubAccount %% AccountIdentification5 recursion level 1 with max 1 class AccountIdentification5{ Identification IsoMax35Text Name IsoMax35Text } AccountIdentification5 *-- "0..1" GenericIdentification30 : Type %% AccountIdentification5 recursion level 1 with max 1 class AccountIdentification5{ Identification IsoMax35Text Name IsoMax35Text } AccountIdentification5 *-- "0..1" GenericIdentification30 : Type
SecuritiesAccount21 members
Member name | Description | Data Type / Multiplicity |
---|---|---|
Account | Account identification. | AccountIdentification5 - Required 1..1 |
SubAccount | Sub-account identification. | AccountIdentification5 - Optional 0..1 |
BaseCurrency | Base currency for the account. | ActiveOrHistoricCurrencyCode - Optional 0..1 |
ReportingCurrency | Currency chosen for reporting purposes by the account owner in agreement with the account servicer. | ActiveOrHistoricCurrencyCode - Optional 0..1 |
ForeignExchangeRate | Foreign exchange rate applied between the reporting and base currencies. It is assumed the valuation date is the same as the report date. | IsoBaseOneRate - Optional 0..1 |
TotalPortfolioValuation building block
Valuation information of the portfolio. In some markets a fund of funds or an investment fund is regarded as a portfolio. Valuation information of the portfolio. For comparison, see the ISO20022 official specification
classDiagram direction tb %% TotalPortfolioValuation1 recursion level 0 with max 1 TotalPortfolioValuation1 *-- "1..1" AmountAndDirection30 : TotalPortfolioValue TotalPortfolioValuation1 *-- "0..1" AmountAndDirection30 : PreviousTotalPortfolioValue TotalPortfolioValuation1 *-- "0..1" AmountAndRate2 : TotalPortfolioValueChange TotalPortfolioValuation1 *-- "1..1" AmountAndDirection30 : TotalBookValue TotalPortfolioValuation1 *-- "0..1" AmountAndDirection30 : PreviousTotalBookValue TotalPortfolioValuation1 *-- "0..1" AmountAndRate2 : TotalBookValueChange TotalPortfolioValuation1 *-- "0..1" AmountAndDirection30 : TotalReceipts TotalPortfolioValuation1 *-- "0..1" AmountAndDirection30 : TotalDisbursements TotalPortfolioValuation1 *-- "0..1" AmountAndDirection30 : IncomeReceived TotalPortfolioValuation1 *-- "0..1" AmountAndDirection30 : ExpensesPaid TotalPortfolioValuation1 *-- "0..1" AmountAndDirection31 : UnrealisedGainOrLoss TotalPortfolioValuation1 *-- "0..1" AmountAndDirection31 : RealisedGainOrLoss TotalPortfolioValuation1 *-- "0..1" AmountAndDirection30 : AccruedIncome TotalPortfolioValuation1 *-- "0..0" InvestmentFund1 : InvestmentFundDetails %% AmountAndDirection30 recursion level 1 with max 1 class AmountAndDirection30{ Amount IsoActiveOrHistoricCurrencyAndAmount Sign IsoPlusOrMinusIndicator } %% AmountAndDirection30 recursion level 1 with max 1 class AmountAndDirection30{ Amount IsoActiveOrHistoricCurrencyAndAmount Sign IsoPlusOrMinusIndicator } %% AmountAndRate2 recursion level 1 with max 1 class AmountAndRate2{ Rate IsoPercentageRate } AmountAndRate2 *-- "0..1" AmountAndDirection30 : Amount %% AmountAndDirection30 recursion level 1 with max 1 class AmountAndDirection30{ Amount IsoActiveOrHistoricCurrencyAndAmount Sign IsoPlusOrMinusIndicator } %% AmountAndDirection30 recursion level 1 with max 1 class AmountAndDirection30{ Amount IsoActiveOrHistoricCurrencyAndAmount Sign IsoPlusOrMinusIndicator } %% AmountAndRate2 recursion level 1 with max 1 class AmountAndRate2{ Rate IsoPercentageRate } AmountAndRate2 *-- "0..1" AmountAndDirection30 : Amount %% AmountAndDirection30 recursion level 1 with max 1 class AmountAndDirection30{ Amount IsoActiveOrHistoricCurrencyAndAmount Sign IsoPlusOrMinusIndicator } %% AmountAndDirection30 recursion level 1 with max 1 class AmountAndDirection30{ Amount IsoActiveOrHistoricCurrencyAndAmount Sign IsoPlusOrMinusIndicator } %% AmountAndDirection30 recursion level 1 with max 1 class AmountAndDirection30{ Amount IsoActiveOrHistoricCurrencyAndAmount Sign IsoPlusOrMinusIndicator } %% AmountAndDirection30 recursion level 1 with max 1 class AmountAndDirection30{ Amount IsoActiveOrHistoricCurrencyAndAmount Sign IsoPlusOrMinusIndicator } %% AmountAndDirection31 recursion level 1 with max 1 class AmountAndDirection31{ Amount IsoActiveOrHistoricCurrencyAndAmount ShortLongIndicator ShortLong1Code } %% AmountAndDirection31 recursion level 1 with max 1 class AmountAndDirection31{ Amount IsoActiveOrHistoricCurrencyAndAmount ShortLongIndicator ShortLong1Code } %% AmountAndDirection30 recursion level 1 with max 1 class AmountAndDirection30{ Amount IsoActiveOrHistoricCurrencyAndAmount Sign IsoPlusOrMinusIndicator } %% InvestmentFund1 recursion level 1 with max 1 class InvestmentFund1{ ClassType IsoMax35Text TotalUnitsOutstanding IsoDecimalNumber TransactionalUnits IsoDecimalNumber } InvestmentFund1 *-- "0..1" SecurityIdentification14 : FinancialInstrumentIdentification InvestmentFund1 *-- "0..1" AmountAndDirection30 : TotalValue InvestmentFund1 *-- "0..0" PriceInformation10 : Price InvestmentFund1 *-- "0..0" SupplementaryData1 : SupplementaryData
TotalPortfolioValuation1 members
Member name | Description | Data Type / Multiplicity |
---|---|---|
TotalPortfolioValue | Total value of the portfolio (sum of the assets, liabilities and unrealised gain/loss) calculated according to the accounting rules. | AmountAndDirection30 - Required 1..1 |
PreviousTotalPortfolioValue | Previous total value of the portfolio. | AmountAndDirection30 - Optional 0..1 |
TotalPortfolioValueChange | Difference or change between the previous total portfolio value and the current total portfolio value. | AmountAndRate2 - Optional 0..1 |
TotalBookValue | Net asset on balance sheet - total portfolio value minus or plus the unrealised gain or loss. | AmountAndDirection30 - Required 1..1 |
PreviousTotalBookValue | Previous net asset on balance sheet. | AmountAndDirection30 - Optional 0..1 |
TotalBookValueChange | Difference or change between the previous net asset on balance sheet and the current net asset on balance sheet. | AmountAndRate2 - Optional 0..1 |
TotalReceipts | Total receipts attributable to the portfolio. | AmountAndDirection30 - Optional 0..1 |
TotalDisbursements | Total disbursements attributable to the portfolio. | AmountAndDirection30 - Optional 0..1 |
IncomeReceived | Income attributable to the portfolio. | AmountAndDirection30 - Optional 0..1 |
ExpensesPaid | Expenses attributable to the portfolio. | AmountAndDirection30 - Optional 0..1 |
UnrealisedGainOrLoss | Difference between the holding value and the book value of the portfolio. | AmountAndDirection31 - Optional 0..1 |
RealisedGainOrLoss | Difference between the realised value caused by the actual trade/re-evaluation and the book value of the portfolio. | AmountAndDirection31 - Optional 0..1 |
AccruedIncome | Accrued income. | AmountAndDirection30 - Optional 0..1 |
InvestmentFundDetails | Valuation information of the investment fund or investment fund share class. | InvestmentFund1 - Unknown 0..0 |
Balance building block
Balance breakdown information. Balance breakdown information. For comparison, see the ISO20022 official specification
classDiagram direction tb %% PortfolioBalance1 recursion level 0 with max 1 PortfolioBalance1 *-- "1..0" BalanceDetails5 : SummaryBalance PortfolioBalance1 *-- "1..0" BalanceDetails6 : DetailedBalance %% BalanceDetails5 recursion level 1 with max 1 class BalanceDetails5{ Unrealised Unrealised1Code } BalanceDetails5 *-- "1..1" IBalanceType6Choice : Type BalanceDetails5 *-- "1..1" AmountAndDirection31 : Amount BalanceDetails5 *-- "0..0" BalanceDetails6 : DetailedBalance %% BalanceDetails6 recursion level 1 with max 1 class BalanceDetails6{ Category FinancialAssetTypeCategory1Code Unrealised Unrealised1Code } BalanceDetails6 *-- "0..1" IBalanceType7Choice : Type BalanceDetails6 *-- "1..1" AmountAndDirection31 : Amount
PortfolioBalance1 members
Member name | Description | Data Type / Multiplicity |
---|---|---|
SummaryBalance | Summary balance information. | BalanceDetails5 - Unknown 1..0 |
DetailedBalance | Detailed balance information. | BalanceDetails6 - Unknown 1..0 |
SupplementaryData building block
Additional information that can not be captured in the structured fields and/or any other specific block. Additional information that can not be captured in the structured fields and/or any other specific block. For comparison, see the ISO20022 official specification
classDiagram direction tb %% SupplementaryData1 recursion level 0 with max 1 class SupplementaryData1{ PlaceAndName IsoMax350Text } SupplementaryData1 *-- "1..1" IsoSupplementaryDataEnvelope1 : Envelope %% IsoSupplementaryDataEnvelope1 recursion level 1 with max 1
SupplementaryData1 members
Member name | Description | Data Type / Multiplicity |
---|---|---|
PlaceAndName | Unambiguous reference to the location where the supplementary data must be inserted in the message instance. In the case of XML, this is expressed by a valid XPath. | IsoMax350Text - Optional 0..1 |
Envelope | Technical element wrapping the supplementary data. | IsoSupplementaryDataEnvelope1 - Required 1..1 |
Extensibility and generalization considerations
To facilitate generalized design patterns in the system, the TotalPortfolioValuationReportV01 implementation follows a specific implementaiton pattern. First of all, TotalPortfolioValuationReportV01 impleemnts IOuterRecord indicating it is the outermost logical part of the message definition. Like all message wrappers, TotalPortfolioValuationReportV01Document implements IOuterDocument. Because TotalPortfolioValuationReportV01 implements IOuterDocument, it is a suitable template parameter for IOuterDocument, and causes the internal ‘Message’ to be of type TotalPortfolioValuationReportV01.
classDiagram class IOuterRecord TotalPortfolioValuationReportV01 --|> IOuterRecord : Implements TotalPortfolioValuationReportV01Document --|> IOuterDocument~TotalPortfolioValuationReportV01~ : Implements class IOuterDocument~TotalPortfolioValuationReportV01~ { TotalPortfolioValuationReportV01 Message }
Document wrapper for serialization
The only real purpose TotalPortfolioValuationReportV01Document serves is to cause the document to be serialized into the ‘urn:iso:std:iso:20022:tech:xsd:semt.024.001.01’ namespace. Therefore, it will probably be the usual practice to build the message and construct this wrapper at the last minute using TotalPortfolioValuationReportV01.ToDocument() method. The returned TotalPortfolioValuationReportV01Document value will serialize correctly according to ISO 20022 standards.
classDiagram TotalPortfolioValuationReportV01Document *-- TotalPortfolioValuationReportV01 : 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:semt.024.001.01">
<TtlPrtflValtnRpt>
<Pgntn>
<!-- Pagination inner content -->
</Pgntn>
<RptGnlDtls>
<!-- ReportGeneralDetails inner content -->
</RptGnlDtls>
<AcctDtls>
<!-- AccountDetails inner content -->
</AcctDtls>
<TtlPrtflValtn>
<!-- TotalPortfolioValuation inner content -->
</TtlPrtflValtn>
<Bal>
<!-- Balance inner content -->
</Bal>
<SplmtryData>
<!-- SupplementaryData inner content -->
</SplmtryData>
</TtlPrtflValtnRpt>
</Document>
Data from ISO specification
This is the technical data from the specification document.
<messageDefinition
xmi:id="_Fyx0CdHWEd-BzquC8wXy7w_-475830186"
name="TotalPortfolioValuationReportV01"
definition="Scope
An account servicer sends a TotalPortfolioValuationReport to an account owner to provide detailed valuation information for a portfolio.
Usage
The TotalPortfolioValuationReport will be sent by the account servicer to the account owner on an agreed basis. The report may also be requested using a SecuritiesStatementQuery.
The TotalPortfolioValuationReport is used to report on a portfolio without Investment Funds; or to report on a portfolio when an investment fund is regarded as a portfolio containing, only one or multiple investment funds
The TotalPortfolioValuationReport may also be used to:
- re-send a message previously sent (the CopyDuplicate value is DUPL),
- provide a third party with a copy of a message for information (the CopyDuplicate value is COPY),
- re-send to a third party a copy of a message for information (the CopyDuplicate value is CODU)."
registrationStatus="Registered"
messageSet="_6Xy9U_2bEeG1VMy7BW0rqA"
xmlTag="TtlPrtflValtnRpt"
rootElement="Document"
xmlns:xmi="http://www.omg.org/XMI">
<messageBuildingBlock
xmi:id="_Fyx0C9HWEd-BzquC8wXy7w_822256636"
name="Pagination"
definition="Page number of the message (within the report) and continuation indicator to indicate that the report is to continue or that the message is the last page of the report."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="1"
xmlTag="Pgntn"
complexType="_Q65gBdp-Ed-ak6NoX_4Aeg_-21330104" />
<messageBuildingBlock
xmi:id="_Fyx0DNHWEd-BzquC8wXy7w_-958164327"
name="ReportGeneralDetails"
definition="General information related to the total portfolio valuation report."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="1"
xmlTag="RptGnlDtls"
complexType="_m_exhfNBEeCuA5Tr22BnwA_1065800194" />
<messageBuildingBlock
xmi:id="_Fy7lANHWEd-BzquC8wXy7w_-1255643998"
name="AccountDetails"
definition="Details of the account. The account may represent an investment portfolio or a fund."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="1"
xmlTag="AcctDtls"
complexType="_m-Itu_NBEeCuA5Tr22BnwA_1737617622" />
<messageBuildingBlock
xmi:id="_Fy7lAdHWEd-BzquC8wXy7w_-658833918"
name="TotalPortfolioValuation"
definition="Valuation information of the portfolio. In some markets a fund of funds or an investment fund is regarded as a portfolio."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="1"
xmlTag="TtlPrtflValtn"
complexType="_m_CFkvNBEeCuA5Tr22BnwA_780606232" />
<messageBuildingBlock
xmi:id="_Fy7lAtHWEd-BzquC8wXy7w_-1598852057"
name="Balance"
definition="Balance breakdown information."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="0"
xmlTag="Bal"
complexType="_m9_jwPNBEeCuA5Tr22BnwA_-274650344" />
<messageBuildingBlock
xmi:id="_s1GtwGtdEeCY4-KZ9JEyUQ_-1722914512"
name="SupplementaryData"
definition="Additional information that can not be captured in the structured fields and/or any other specific block."
registrationStatus="Provisionally Registered"
maxOccurs="1"
minOccurs="0"
xmlTag="SplmtryData"
complexType="_Qn0zC9p-Ed-ak6NoX_4Aeg_468227563" />
<messageDefinitionIdentifier
businessArea="semt"
messageFunctionality="024"
flavour="001"
version="01" />
</messageDefinition>
ISO Building Blocks
The following items are used as building blocks to construct this message.