Milestone - Account/Portfolio Views

Our strategy for feature implementation is to take the hardest features, and those most likely to change our database/object structure, and implement those first. We recently discovered that the Portfolio/Account views were going to be difficult to implement, so we put cost accounting on hold. This is a long post because the concept is very tricky and positively impacts many areas of the software.

There are two separate "views" of the data in FinFolio, one to represent the legal system-of-record data (Account view) and one to mirror the firm's view of the client positions (Portfolio view). This lets us maintain the integrity of the system-of-record data and preserve the layout for data imports, while allowing advisors to specify a completely different reporting structure that can be used for modeling and printing client reports.

This should give advisors complete flexibility in mapping accounts, but remove complexity at report printing time. As I've been talking to advisors, I've heard several stories about having to re-print quarterly reports because you selected an incorrect option before clicking Print. With the Portfolio/Account structure you can set it once when the account is imported and keep the same structure for the life of the account.

The Account view (Client-Account-Position) represents the legal relationships and should match exactly the custodial system of record. This view is used for imports and data troubleshooting. Your back-office and data reconciliation team will primarily look at the data this way. The account object is multi-dimensional, meaning Accounts can own other accounts, although Trusts are the only type of account we've found so far that actually does this. The Account view is automatically setup when you import your data from the custodians.

The Portfolio view (Household-Portfolio-Position) represents your firm's treatment and structure of the client data. This is the view you will use for reporting, modeling/rebalancing and (probably) billing. The front-office team, management, and your clients will use this view. The portfolio object is multi-dimensional, meaning Portfolios may own other Portfolios. This must be created manually by your operations team, but won't need to be changed unless new accounts are opened for your client. You can map account positions into Portfolios at the individual asset/position or account levels.

The tricky part of this wasn't mapping out two separate views. It was creating a denormalized link from the bottom leaf (Positions) up to the upper leaves (Households/Clients/Positions/Accounts) so that current values and positions can be displayed in real time on screens and lists. It became obvious through the process, that the Transaction concept should be used to describe *all* relationships between the various entities. This led naturally to an extremely cool concept that will be pervasive throughout FinFolio--time sensitivity.

Example 1 - Time Sensitive Ownership

Say I open an account at Schwab at the beginning of April, and purchase 100 shares of Microsoft within that account. The data structure looks like this:

Matt (owns 100% on 4/1 of) Schwab Account (owns 100 shares on 4/1 of) MSFT.

The ownership position into Microsoft and my "ownership" position in the Schwab Account itself are both established through Transactions, which are time sensitive. If I add my wife as a joint account holder next month, then she will be added through an account ownership transaction on 5/1, which keeps intact the integrity of the ownership progression. Matt's data structure will then look like this:

Matt (owns 100% on 4/1 of) Schwab Account (owns 100 shares on 4/1 of) MSFT.
Matt (owns 50% on 5/1 of) Schwab Account (owns 100 shares on 4/1 of) MSFT.

If I print a list of Matt's accounts on 4/1, the report will list the entire value of my Schwab account. If I print the same list on 5/1, it will only attribute to me half the value of my Schwab account. The same "time sensitive transaction" concept will be applied to households and portfolios, allowing you to tweak your ownership structures from quarter to quarter, without changing how historical reports look.

We haven't started on modeling/rebalancing yet, but we will run target models through the same ownership structure, eliminating the problem of mid-period model changes and tweaking target class percentages within the model.

Example 2 - Separate Accounts (or Multiple Accounts Into One Portfolio)

John Smith has a corporate account, and a Morgan Stanley separate account composed of three sub-accounts custodied at Morgan Stanley. His wife also has a Fidelity Individual Account.

Account View

Client: Smith Consulting
+ Account - Smith Consulting Fidelity Business Account
Client: John Smith
+ Account - John Smith Morgan Stanley Aggressive
+ Account - John Smith Morgan Stanley Moderate
+ Account - John Smith Morgan Stanley Savings
+ Account - John Smith IRA
Client: Sally Smith
+ Account - Sally Smith Fidelity Individual

Portfolio View

Household: John and Sally Smith
+ Portfolio: Business
+ Fidelity Business Account
+ Portfolio: Growth
+ Portfolio: Morgan Stanley Separate Account
+ John Smith Morgan Stanley Aggressive
+ John Smith Morgan Stanley Moderate
+ John Smith Morgan Stanley Savings
+ Sally Smith Fidelity Individual

When you download separate accounts (or annuities), you don't get a master account downloaded. So you don't have anything on your system to tie your separate accounts together and separate them from your Individual or IRA accounts. You can set up a multi-tiered portfolio structure with a master portfolio to hold the accounts. Then you can insert the separate account portfolio into yet another parent portfolio (Portfolio: Growth). Alternately, you could simply list the subaccounts without grouping them under a master account.

Like this:

+ Portfolio: Growth
+ John Smith Morgan Stanley Aggressive
+ John Smith Morgan Stanley Moderate
+ John Smith Morgan Stanley Savings
+ Sally Smith Fidelity Individual

Example 3 - One Account Into Multiple Portfolios

Karl Client has one Individual account. You want to treat this as two portfolios, one that you manage and one that you invest in high-risk technology stocks.

Account View

Client: Karl Client
+ Account - Karl Client Individual

Portfolio View

Household - Karl Client
+ Portfolio: Managed (Rebalance Model: Balanced 1)
+ American Funds Growth
+ American Funds International
+ American Funds Fixed Income
+ Portfolio: High-Risk (Rebalance Model: None)
+ Google
+ Microsoft

You attach a rebalancing model to the Managed portfolio but not to the High-risk portfolio, which is traded periodically at your whim. You can treat the client's assets as two separate portfolios even though they are located in the same legal account.

Example 4 - Account Transfers

Ira Investor has a Fidelity IRA which was closed and transferred to Schwab.

Account View

Client: Ira Investor
+ Account - Ira Investor Fidelity IRA (closed)
+ Account - Ira Investor Schwab IRA

Portfolio View

Household: Ira Investor
+ Portfolio: Retirement
+ Ira Investor Fidelity IRA (closed)
+ Ira Investor Schwab IRA

The Fidelity IRA was closed and transferred to Schwab. There is a transfer out in the Fidelity account and multiple transfer ins into the Schwab account, one for each open tax lot. In most systems, you would report each account separately in the quarter the transfer occurred. The rates of return and account history wouldn't carry over to the new account. With FinFolio, you map both IRAs into the same portfolio so, when you report on the portfolio, there appears to be no break in the data or calculation numbers. Only on the transaction ledger report would you see the transfer transactions. Because we are abstracting the reporting view away from the real-world custodian, it appears is as if there was no transfer.

Example 5 - Holding Corporation

You have a client, Joe, who manages certain investments through a holding corporation owned jointly with his brother. You set the holding corporation up separately and establish an ownership position into it by purchasing shares in the holding corporation for Joe. The holding corporation is valued periodically, when Joe (or you) declare a price. This price is not automatically calculated from the underlying stocks within the corporation because, like all other corporations, the holding corp is worth more than the sum of its parts.

Account View

Client: Joe
+ Account - Schwab IRA
+ Account - Fidelity Individual
+ Direct Ownership - Holding Corporation
Client: Holding Corporation
+ Account - Schwab Corporate Account
+ Account - Fidelity Corporate Account

Portfolio View

Household: Joe
+ Portfolio: Retirement
+ Account - Schwab IRA
+ Portfolio: Investment
+ Account - Fidelity Individual
+ Account - Schwab Corporate Account
+ Account - Fidelity Corporate Account

For reporting purposes, you create a Retirement and Investment portfolio. Joe wants to see all the underlying investments from his holding corp in the Investment portfolio, so you add them individually into his Investment account. This will cause their direct values to show up on the reports instead of the periodic valuation struck at the Holding Corporation level as a price.

An alternative way to set up Joe's portfolios is this:

Household: Joe
+ Portfolio: Retirement
+ Account - Schwab IRA
+ Portfolio: Investment
+ Account - Fidelity Individual
+ Account - Holding Corporation

This is more technically correct and will only show Joe's ownership position in the Holding Corp, using whatever price was struck at the end of the period. It will not show the accounts/securities that are within the holding corp.

Topics: Development