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.