Git Product home page Git Product logo

ustaxes's Introduction

What is UsTaxes?

UsTaxes is a free, open-source tax filing application that can be used to file the Federal 1040 form. It is available in both web and desktop versions. It is provided free of charge and requires no sharing of personal data.

Interested in contributing? Get Started

Supported Income data

Most income and deduction information from the following forms are supported for tax years 2022, 2021 and 2020.

  • W2
  • 1099-INT
  • 1099-DIV
  • 1099-B
  • 1098-E
  • 1099-R: support for normal distributions from IRA and pension accounts.
  • SSA-1099

So far, this project can attach the following schedules to form 1040:

  • Schedule 1 (as to Schedule E and 1098-E data only)
  • Schedule 2
  • Schedule 3 (as to excess FICA tax only)
  • Schedule 8812
  • Schedule B
  • Schedule D
  • Schedule E
  • F1040-V
  • F8949 (Uncovered Investment Transactions)
  • F8889 (Health Savings Accounts)
  • F8959 (Additional Medicare Tax)
  • F8960 (Net Investment Income Tax)

Supported Credits

  • Credit for children and other dependents
  • Earned income credit

Supported states

Implemented State returns

The states below have been implemented partially for tax year 2021. See the /src/stateForms/<state>/<relevant form> file for details on unimplemented portions.

  • Illinois

Non-filing states

Users who only have wage income and live in the states below should be able to file taxes using this site, since they do not have state level income tax.

  • Alaska
  • Florida
  • Nevada
  • New Hampshire
  • South Dakota
  • Tennessee
  • Texas
  • Washington
  • Wyoming

Note on using this project

This project is built by a growing community. If you notice an error in the outputted PDF or any other error, please submit an issue on the Github issues tab. We appreciate your feedback!

User Data

The project is available strictly via client side. Data is persisted to the site's localstorage so no personal information ever leaves the user's computer. For those who want extra security, the codebase can also be built as a desktop application.

Contributing

Thank you for taking the time to contribute; let's make tax filing free for everyone! 🎉

To ensure the project is fun for every contributor, please review:

Get Started

This application can be run as either a web application or a standalone desktop application

Web application

This project runs on Node 20. To ensure you're on the proper version, we recommend nvm.

With nvm installed, you may select a version 16 node using:

nvm install 20
nvm use 20

To run,

npm ci          # install package dependencies
npm run start   # run app

Note: To avoid having to set your node versions, we suggest using a tool like direnv. With the following configuration file as .envrc in project root:

export NVM_DIR="$HOME/.nvm"

. "$NVM_DIR/nvm.sh"  # This loads nvm
#. "$NVM_DIR/bash_completion"  # Optional, nvm bash completion

nvm install 20
nvm use 20

your environment will be set up every time you enter the project directory.

Docker

If preferred, a Docker alternative is available:

docker-compose build
docker-compose up

Open a browser to http://localhost:3000.

To stop and remove running containers, run docker-compose down.

Desktop application

The desktop application is built with Tauri. In addition to the above steps, please follow this reference for setting up your environment for Tauri.

Once your environment is set up for Tauri, run, npm run desktop. To avoid a browser window being spawned in addition to the desktop window, just set the BROWSER environment variable as in: BROWSER=none npm run desktop.

To build executables, run npm run desktop-release.

Getting help

Please reach out to us on our discord if you run into any problems, or file an issue. Thank you for your support!

ustaxes's People

Contributors

arisaokasaka avatar aserputov avatar aymarino avatar bluscale4 avatar brandonmcclure avatar ctskennerton avatar dbelokon avatar dependabot-preview[bot] avatar dependabot[bot] avatar drtz avatar eoncarlyle avatar frenchcommando avatar grablair avatar imgbotapp avatar infinity-intellect avatar joshuali7536 avatar jswiss avatar keyonjie avatar michaelrbock avatar mohzulfikar avatar nathaniellovin avatar noahm avatar richmoni avatar saiarcot895 avatar sharlenaluyen avatar ssigwart avatar thegrims avatar tmm1 avatar vermaarn avatar zakpatterson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ustaxes's Issues

Typescript

There are numerous reasons typescript is appropriate for this project. Just in terms of data validation, ensuring that the right type of data is used for form fields, constraining types of data, matching user's data model to pdf templates, etc.

Just a proposal that new code can come in TS form, and in the future existing typeless JS can go away.

Need a new component for modal form, list management

Adding 1099s, W2s, spouse, and dependent all use a common UI, where the user is able to add N items, then edit the items, or remove the items. I'm about to add another such one for managing investment properties for Schedule E. So we need a UI element that encapsulates opening a form, showing a list of items, editing items, and removing items.

Add unit test github action

Add unit test github action that runs against PRs, running all jest tests in the project. If any of them fail, that check fails on the pull request

Add auto release deployments of desktop application

A lot of people in the hacker news chat were rightly worried about an unknown web site asking for their social details. Of course we know that data never leaves the user's machine but there's no obvious way for the user to know that.

I think it would help if we had regular releases of the desktop application binaries.

Fix documentation for running as desktop application, or wait for new tauri release

➜  ustaxes git:(master) yarn desktop
yarn run v1.22.10
$ node ./setup.js && tauri dev
[tauri]: running dev
NOT SUPPORTED: option format. `validateFormats: false` can be used instead.
NOT SUPPORTED: option nullable. "nullable" keyword is supported by default.
NOT SUPPORTED: option uniqueItems. "uniqueItems" keyword is always validated.
DEPRECATED: option unicode. "minLength"/"maxLength" account for unicode characters by default.
(node:21125) UnhandledPromiseRejectionWarning: Error: strict mode: unknown keyword: "defaultProperties"
    at Object.checkStrictMode (/home/projects/oss/ustaxes/node_modules/ajv/dist/compile/validate/index.js:183:15)
    at Object.checkUnknownRules (/home/projects/oss/ustaxes/node_modules/ajv/dist/compile/util.js:32:24)
    at checkKeywords (/home/projects/oss/ustaxes/node_modules/ajv/dist/compile/validate/index.js:118:12)
    at Object.validateFunctionCode (/home/projects/oss/ustaxes/node_modules/ajv/dist/compile/validate/index.js:14:9)
    at Ajv.compileSchema (/home/projects/oss/ustaxes/node_modules/ajv/dist/compile/index.js:78:20)
    at Ajv._compileSchemaEnv (/home/projects/oss/ustaxes/node_modules/ajv/dist/core.js:444:37)
    at Ajv.compile (/home/projects/oss/ustaxes/node_modules/ajv/dist/core.js:139:38)
    at Object../src/types/config.validator.ts (/home/projects/oss/ustaxes/node_modules/tauri/dist/api/dev.js:1665:37)
    at __webpack_require__ (/home/projects/oss/ustaxes/node_modules/tauri/dist/api/dev.js:1910:42)
    at Object../src/helpers/tauri-config.ts (/home/projects/oss/ustaxes/node_modules/tauri/dist/api/dev.js:446:26)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:21125) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:21125) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Done in 2.36s.

Change dropdown format to allow for easy navigation while being performant with many elements

The state dropdown is... confusing. Under the hood it's a bunch of s like I'd expect, but they're popped out into some div, I guess so you can style them? Except this doesn't replicate the functionality of the basic HTML controls -- there's zero keyboard navigation. (To add insult to injury, you record the state as the two-letter thing I want to type anyway, but typing that after I open the dropdown does nothing.) It's not like React can't do a normal dropdown, so what went wrong here?

https://www.reddit.com/r/opensource/comments/kqr89x/open_source_tax_filing_website/gi6d0jv/

Default file save name, extension, location

There should be a default file save name and location on desktop and web. For windows, a dialog pops including a blank file type. I assume if we just set a default file save name with .pdf as the extension then this will be fixed.

On the desktop version if we can select a default file directory, just use $HOME.

rename family information page

Given the content of the family information page, the name should be changed to potentially refund information or contact & bank information, something along those lines.

FYI - possible testing resources

Hello, thanks for a great project. I have enjoyed watching your work.

I am the maintainer of the Tax-Calculator project. We currently validate against internet TAXSIM.

You might consider using these projects in your testing.

If you would ever like to discuss cross-calculator testing or anything else, please feel free to reach out to me at [email protected], or I am happy to participate in discussions in your project issues.

Best,
Matt

Add edit button for list forms

The list component currently used for dependents, spouses, w2s and 1099s should support editing.

Hover over a list item to get an edit button, open form and replace form content on click, overwrite state on save.

Refactor LabeledCheckbox

Currently, the labeled checkbox component can only have yes / no type inputs, should be refactored or another component should be created that can handle multiple checkboxes or radio inputs

Investigate using react-number-format over react-input-mask

https://www.npmjs.com/package/react-number-format

May improve formatting for dollar amounts with commas as well as addressing these issues

A quick glance at the repo: It looks like you're using JS numbers for currency, a bunch of them explicitly floating-point (in the tax brackets). If you do any math with this, you'll be doing math with floats. This is a bad idea for currency -- see https://0.30000000000000004.com/

You can probably get away with using integer number of cents with normal JS numbers... I'd be looking into a big-decimal library of some sort instead -- JS seems to have a few, I guess bignumber.js might work?

I was curious what it'd actually do, so I tried the website... and I know you said "work in progress", so I'm trying to be constructive here... but it was pretty broken:

Trying to enter an Employer Identification Number, neat how it enters the - and everything, but after filling the page with nonsense data (EIN of '12-34567'), it won't save and continue, and I get "Input should be filled with 7 numbers" on the EIN.
Oh, it wants 9 numbers. Okay, fair enough, but...
Now it eats inputs. I type '8' at the end of the line, and that's fine, then I type '9' and it doesn't appear in the 'input' but the box appears to validate... until I tab away.
Fine, let's clear it and try again... First keystroke gets eaten before I even start typing. So if I type '1234' it gets recorded as '23-4'.
Basically, had to clear everything, reload the page, and type the entire fake number in one go without any line-editing...

https://www.reddit.com/r/opensource/comments/kqr89x/open_source_tax_filing_website/gi6d0jv/

Support capital gains income (1099 B), Schedule D

Should be able to add data from multiple 1099 B forms, pdf output should include schedule D and accumulate to field number 64 on the 1040.

Todos:

Dealing with uncovered and unreported transactions is a separate issue:

  • Schedule 8949 - used when basis is not reported to IRS, or for capital gains that are not reported on 1099B.
    • There are a number of types of transactions to report here:
      • (B) Short-term basis unreported transactions - required
      • (C) Short-term transactions not reported on form 1099-B - required
      • (E) Long-term basis unreported transactions - required
      • (F) Long-term transactions not reported on form 1099-B - required
    • User should be able to add list of transactions for B, C, E, F (note we should determine long term / short term)

Landing page

It would be really helpful to have a landing page with blurbs about what this project does right now and what it doesn't do. Perhaps a feature-to-feature comparison table with other popular tax products and their different tiers.

Side note, there are many people that would love to bury other popular tax products so if you're serious about this then you might consider doing a gofundme or some kind of crowd funding to give you more time to work on it.

Add questions for dependents

Checkboxes for field numbers 35, 36, and below from the 1040, "Child tax credit", "Credit for other dependents"

Support 1099 interest and dividends

Lines 53-56 of the 1040, schedule b: https://www.irs.gov/pub/irs-pdf/f1040sb.pdf

Tracking todos:

  • #118 - Support income reported on 1099-INT, taxable interest
  • #124 - Support dividends reported on 1099-DIV (Schedule B Part II) - This is complicated because qualified dividends need to be captured on the qualified dividends and capital gains worksheet, probably requires #69 first
  • Support questions required in part 3 of Schedule B -- I think this should be a new issue, there are lots of informational questions
  • Support tax-exempt interest? F1040 Line 2a

Why are you using tauri/rust?

I went through your tauri/rust code and it doesn't seem like much is going on. Why are you using it? I am trying to understand the rationale.

If there is way to just use a node-based webserver, it would reduce this unnecessary dependency.

Runtime type validation

All input elements ingest strings, and at runtime all typescript type information is no longer available, so strings can easily end up in the model.

https://github.com/thegrims/UsTaxes/pull/82/files#diff-464829cf1923068e6ce603cab38ebb785416301be67889ab3e2f0da74e04a432R25

We need to handle all these type errors just at the interface between the user and the action creators, so that any further analysis depending on the global data model can assume the types are correct.

Possible library:
https://github.com/vega/ts-json-schema-generator

Fix main page container grid system

The form container grows horizontally if a contained component is too wide, for example if the <LabeledInput> has a long label.

The custom css for the form component can be adjusted to fix this. Currently in App.css, the form width is set using min-width. Adding a max-width would prevent this from growing.

But we can do better. Also, on mobile the drawer navigation is not showing. So showing a menu button in mobile would be nice. At the same time we can address the form width containment.

Proposed goals are:

  • Add app bar to top for narrow screens
  • Add menu button to show / hide drawer for narrow screens
  • Allow form to take up an appropriate amount of horizontal space depending on screen width.

https://material-ui.com/components/drawers/

Return extensibility / schedules templating design

We should come up with an easy way for users to add additional schedules they may need in their returns. As of now, the 1040 is the only one available.

  • Data should be available to be filled and reusable from user's data model
  • User's data model should be extensible so new data required for a schedule or form can be added.
  • New schedule needs a link to download the appropriate PDF
  • Needs to be easy to define a new template for generating the filled PDF from the user's data model

Passive losses from schedule E

If schedule E creates a net loss, then a negative number is brought forward to the 1040 which reduces taxable income.

If schedule E has a net passive loss, then form 8582 must be used to figure the negative number that may be brought forward to the 1040.

Should we move this repository into its own organization?

I opened github.com/ustaxes, with myself and @thegrims as owners

https://docs.github.com/en/github/administering-a-repository/transferring-a-repository#whats-transferred-with-a-repository

  • Helps promote this project as its own independent thing
  • I would like to be able to add a commit to #84 without superseding #84 or directly adding commits. If this were in its own repository then I could make a PR against @thegrims's fork. When he approved my PR, the commits would be added to the origin's PR.

https://docs.github.com/en/github/administering-a-repository/transferring-a-repository#transferring-a-repository-owned-by-your-user-account

Implement remaining Schedule EIC qualification conditions

This is a single tracking issue for all remaining qualification conditions that need implementing with respect to Schedule EIC.

View pages 40-47 of the general instructions

Step 1 - All Filers

  • 1.1 - Income limits by number of children
  • 1.2, both spouses must have a SSN issued before 2020 due date and without work restriction and valid for eic purposes. assumed true, console warning
  • 1.3, MFS status disallowed
  • 1.4 - If filing form 2555, disallowed assumed allowed, console warning
  • 1.5 - Special rules apply for non-resident aliens. ignored, console warning

Step 2 - Investment income

  • 2.1 - Investment income calculation
  • 2.2 - Investment income limit
  • 2.3 - If investment income is above the limit, F4797 may still allow EIC. Assuming this does not apply, console warning if this calculation is attempted
  • 2.4.1 - Filing schedule E assuming no, console warning if attempted.
  • 2.4.2 - Income from certain personal property -> Worksheet 1 Pub 596 assuming does not apply, console warning if attempted
  • 2.4.3 - Filing form 8814 (children's interest and dividends) - assuming does not apply, console warning if attempted
  • 2.4.4 - Passive activity income - assuming does not apply, console warning if attempted
  • 2.4.5 - Pub 596 Worksheet must be completed relating to the items above, assuming does not apply, console warning

Qualifying Children

  • 3.1 - If the taxpayer has a qualifying child,
    • must have a valid SSN unless the child was born and died in 2020
    • must be a Son, daughter, stepchild, foster child, brother, sister, stepbrother, stepsister, half brother, half sister, or a descendant of any of them (for example, your grandchild, niece, or nephew)
    • Not filing a joint return (or is filing a joint return only to claim refund of withheld income tax or estimated tax paid)
    • Special rules apply if the child can be claimed as the qualifying dependent of more than one person.
  • 3.2 - Is a joint return
  • 3.3, asked again at 4.5 - If the taxpayer could be the child of another. This is also probably addressed in #191 and #162

Filers without qualifying child

  • 4.1 -Income limit check again
  • 4.2 - Taxpayer must be over 25 but under 65, other issues for dead spouse or dead taxpayer, assumed passes, console warning
  • 4.3 - Primary residence in US for more than half of year assumed true, console warning
  • 4.4 Joint return again
  • 4.5 Qualifying child of another (same as 3.3 above) disallowed for single filer assumed allowed
  • 4.6 Dependent of another disallowed for single filers. According to "rule 12" here, spouse can also not be a dependent of another.

Earned income

  • 5.1 - Filing Schedule SE for church related self-emplyment income assumed false, console warning
  • 5.1.2 - Scholarship income and grants assumed zero, console warning
  • 5.1.3 - Penal income, assumed zero, console warning
  • 5.1.4 - Pension plan income, assumed zero, console warning
  • 5.1.5 - Medicaid waiver payments: assumed zero, console warning
  • 5.1.6,7 - Calculations
  • 5.1.8 - Choice to include or not include nontaxable combat pay, assumed not applicable, console warning.
  • 5.1.9 - Earned income calculated based on 5.1.x items
  • 5.2 - Self employed, filing SE with church income or Schedule C, assumed not applicable, console warning
  • 5.3 - Earned income check - the EIC formula will indicate a negative credit if earned income is outside of these bounds

Figuring credit

  • 6.1 - There is an option to allow the IRS to figure the credit, we will attempt to figure the credit.
  • - Worksheet A, calculation of credit amount is complete, assuming above items.

Create 404 page

Create 404 page that shows up when a user navigates to a page that is not defined in Urls const

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.