Skip to content

GeneralInfluence/MicroCaptive

Repository files navigation

MicroCaptive

Visualizing Captive Insurance

The Python Script has two scenarios:

  1. Scenario 1, where distributions from a K-1 type of entity (LLP, etc) are invested based on certain assumptions.

  2. Scenario 2, where an 831(b) captive insurer gets the distributions from the K-1 entity paid as premiums, which are then invested.

Distributions Assumptions

As the distributions calculations are more complex, here are the assumptions we used:

  1. Distributions come out of the equity portfolio first. Reason: As retirees age, usually they are advised to rely more on fixed income. So we are funding distributions out of the equity portfolio first.
  2. Once the equity portfolio is fully sold, distributions come out of the bond portfolio.
  3. Distribution amounts are distributed at the start of each year and then once at the end of year 20 to exhaust the portfolio, totaling 11 distributions. (Year 1 has an index of 0, and Year 20 has an index of 19. The end of Year 20 is the start of Year 21, marked with index 20 in the DataFrame.)
  4. Distributions include the amount needed to pay capital gains taxes on amounts sold.
  5. Dividends and Interest, net of tax, are included in the distributions.
  6. Hence: Dividends + Interest + Capital Gains to be Paid + Net Capital Sold = Distribution.
  7. Related, After Tax Income is assumed to be: Dividends + Interest + Net Capital Sold

Running the Script

The script can be run directly in an interpreter, and will run the two client scenarios and save dataframes of the data for visualization purposes to the local directory (later version can save to a user-defined path).

If you want to run the script in Spyder, Atom or something else and not automatically run the scenarios, I recommend you comment out the last lines of script.

In that case, to get the information you want for a scenario, do the below when in a IDE:

  1. Import the scenario classes: from va_scenariocalculator import scenario_one, scenario_two
  2. Create a client (if you want to toggle the initial amount, then do initial_amount = your_number):
  • clientx = scenario_one()
    
  • clienty = scenario_two()
    
  1. Call the total_returns() method:
  • clientx_first10 = clientx.total_returns().
    
  • clienty_first10 = clienty.total_returns()
    
  1. Call the distributions method (recommend that you set a hypothesis distribution, like 750900 for scenario 1, and 1251000 for scenario 2, for faster results, which also is what you would do in Excel with Goal Seek):
  • clientx_last10, clientx_info = clientx.distributions()
    
  • clienty_last10, clienty_info = clienty.distributions()
    
  1. Run combine_csvs function to combine the DataFrame from the total_returns method and the first DataFrame from the distributions method, so that you see the assets compounding over the first 10 years, and then drawing down over the next 10.
  • clientx_returns = combine_csvs(clientx_first10, clientx_last10)
    
  • clienty_returns = combine_csvs(clienty_first10, clienty_last10)
    
  1. Run the after_tax_compare function after running both scenarios to get the After Tax Income for each year for both scenarios, and the difference between them.
  • after_tax_compare(clientx_info, clienty_info)
    

Methods

Total_returns()

This method returns a DataFrame of the portfolio investments from year 1 to 10.

Distributions()

This returns two dataframes:

  1. A dataframe tracking the portfolio's muni and equity components over the 10 year distribution period.
  2. A dataframe showing the distribution per year (which includes the amount needed to pay capgains taxes), the proportion of the distribution that is principal from the muni or equity portfolio, and the capgains taxes paid that year.

After Tax Income each year will be the difference of distributions and capgains paid for that year.

About

Visualizing Captive Insurance

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published