Git Product home page Git Product logo

fingine's People

Contributors

javednissar avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

fingine's Issues

Implement events

Why?

One's finances are affected by events. These events can include bi-weekly salary cheques, dividends, rent payments, and more. There are generally two types of events for our purposes, income events and expense events. For the simulation, there will be the notion of event streams which will generate an event for a particular day if it matches certain conditions. I'm also looking to implement the notion of scheduled events within the simulation.

TODO

  • Implement event streams
  • Implement scheduled events
  • Distinguish between income events and expense events
  • Model changes in the events produced by an event stream over time (ex. model annual rent increases)

Implementing investment strategies

Why?

Modelling investment strategies and deciding asset allocation in response to events. This is probably best modelled as a struct that contains a binary function whose parameters are the relevant event and the current portfolio and the return value is the new portfolio.

TODO

  • Model investment strategy as a struct with a function
  • Implement call of investment strategy in simulation

Implement equity packages

Why?

For software engineers, equity is a common part of compensation. For public companies, equity can be reasonably be thought of as equivalent to cash but this isn't necessarily the case; public company stock can be sufficiently volatile that considering it to be equivalent to cash can be mistaken. For startups, it is useful to consider equity as worth nothing but if you're optimistic about the startup's chances, it might be worth it to think about the equity package as rising in value.

TODO

  • Implement notion of equity as asset
  • Implement notion of equity package as event streams

Set up documentation for other languages (eventually!)

It probably isn't reasonable to expect folks to use this library straight from Rust. It's much better to add bindings to let this library be used elsewhere. These bindings should have plenty of docs to encourage folks to use it.

Implement tax engine

Why?

Build out a system for supporting tax calculations in the simulation. Since, I'm a software engineer it probably makes sense to focus on jurisdictions in Canada that I as a software engineer am likely to spend time in. America can be handled later.

TODO

  • Implement progressive income tax
  • Implement flexible deductions system
  • Figure out what tax credits are worth representing
  • Validate currencies in tax bracket
  • Make deductions_map internal in TaxRegime
  • Validate currencies in TaxRegime
  • Correct variable names throughout current implementation
  • Use thiserror and unify errors that can occur in tax calculator
  • Implement ordering on tax brackets
  • Replace tax credit enum with String and then have an enum at the country/province level to force certain inputs
  • Build out ability to handle parallel tax regimes (ex. Ontario income tax + federal income tax + Ontario health premium)
  • Add more comprehensive test suite
  • Add tax regime generator system for easily building out tax regimes
  • Implement federal tax regime
  • Implement BC tax regime
  • Implement Alberta tax regime
  • Implement Ontario tax regime
  • Implement Quebec tax regime

Implement portfolio

Why?

A financial simulation is impossible to build without the notion of a portfolio. A portfolio provides a mechanism to model the growth of one's capital assets. To model this properly, we need to also model assets, inflation, and registered accounts. To be clear here, registered accounts refers to special accounts with unique properties. The two target account types that are relevant for this ticket are the TFSA and the RRSP which are crucial tools for Canadian financial planning.

TODO

  • Implement concept of assets (ex. equities, bonds)
  • Implement concept of growth of assets over time (ex. modelling the historical growth rate of stocks)
  • Implement inflation
  • Implement notion of accounts
  • Implement notion of a portfolio which is just a collection of accounts

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.