Giter Club home page Giter Club logo

codeforboston / windfall-elimination Goto Github PK

View Code? Open in Web Editor NEW
24.0 16.0 45.0 51.87 MB

Windfall Elimination Provision Awareness Project: improving the experience of retirees around an obscure Social Security rule affecting 8+ states (previously https://ssacalculator.org)

Home Page: https://windfall-develop.netlify.app/

License: MIT License

JavaScript 66.20% TypeScript 33.74% CSS 0.05% Shell 0.01%
retirees wep code-for-america code-for-boston social-security public-benefits

windfall-elimination's Introduction

Windfall Elimination Provision, USA Social Security

This is a tool to help retirees affected by the Social Security Windfall Elimination Provision (WEP). WEP mostly affects public servants like teachers and firefighters, and can mean a reduction in SSA benefits of up to 50%. This tool will help affected workers, and anyone with a social security card, better plan retirement and self-advocate with the Social Security administration.

What is inside?

  • SSACalculator.org App for best user experience on tablets, ideally pursued with a case worker.
  • Official MySocialSecurity.org earnings record PDF scraping using PDF.js (and official XML format parsing)
  • Typescript type checking to ensure matching types between replicated SSA algorithms and Gatsby/React.
  • Tests to compare output of known documented examples to the Microsoft Windows-based Social Security Detailed Calculator.
  • AnyPIAJS and PiaFormat.ts allowing use of the (originally Windows-based) Social Security Detailed Calculator from within this app, without any sending data away from the user's browser.
  • Observable WEP calculation Prototype - The earlier, alpha version of the calculator's math: from Feb 2019.

Join the Slack channel #windfall-elimination for more information.

Installation

Use git clone command with SSH. Run npm install && npm start to launch the project.

  • To turn on feature toggle that enables features.

    • In Windows PowerShell(not cmd), run $env:<feature keyword> = 'true'; npm start
    • In Mac and Linux, run <feature keyword>=true npm start
  • Feature keyword list

    • GATSBY_SHOW_FUTURE_EARNINGS_PAGE : show future earnings page in left side bar and main page
    • GATSBY_SCROLL_WHEN_FINISH : scroll down when finish each step in prescreen-1b

windfall-elimination's People

Contributors

alexjcode avatar alxhghs avatar arunsharmalearning avatar asooge avatar carpeliam avatar changangus avatar dependabot-preview[bot] avatar djmvhb avatar dylanesque avatar elena-ageeva avatar ethanstrominger avatar fords avatar ginagr avatar henryneale avatar imyjimmy avatar kevin1192 avatar linesbetween avatar lucaslombardo avatar lyctc avatar markswinimer avatar matankb avatar misspran avatar mshkolnik22 avatar nvanwitt avatar prayuthnaduthota avatar shivam2407 avatar stvnwn avatar tdean1991 avatar thadk avatar whereshj 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

Watchers

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

windfall-elimination's Issues

Create a 'print results' option on Results page

Should allow people to print out a page with:

  1. AIME
  2. Years of substantial earnings
  3. Monthly pension amount
  4. non-WEP adjusted PIA at Full Retirement Age
  5. WEP-adjusted PIA at Full Retirement Age
  6. WEP-adjusted PIA at chosen retirement age

Should be an option at the bottom of the "results" screen, with the option to look at further information on the formula

Add Sebastian's lump sum pension option into the calculator

On the input your pension (noncovered pension) screen, we need to have an option that helps people figure out what to do if they have a lump sum pension instead of a monthly pension.

We will need to ask people if they have a lump sum or a monthly pension. If a monthly pension, they enter the amount, and we're good.

If a lump sum, we need to ask for the amount AND the age when they are eligible to start withdrawing from the lump sum.
To calculate a monthly amount from the lump sum, they look at the table below at the year they become eligible, and divide the lump sum by the number of months the SSA expects them to live.
https://secure.ssa.gov/apps10/poms.nsf/lnx/0300605364

Integrate cost-of-living (COLA) into calculator

Cost-of-living (aka COLA) is used to offset value lost due to inflation. The COLA amount varies by year and is expressed as a percentage (i.e., like inflation) - it is driven by the consumer price index (CPI). SSA benefits are increased by the COLA amounts each year in a compounding way.

See https://www.ssa.gov/cola/ for more information.

XML Parser

We need a functioning javascript XML parser for an individuals earning records.

  • Status?
    If we have working code:
    - Test with large dataset (team's earning records).
    - Add to React App.
    If not:
    - Write XML parser
    -Test sets: Individuals Earnings Records (get from MySSA)

Warning notification cell for Observable

New warning notification cell in the Observable notebook that checks the value of important parts of the calculation to make sure they are actually completed and not just defaults. Whenever something is not filled correctly it will show with a ⚠️ or 🚨.

Also we should decide where to put this cell on the app. Should it be above each other cell, at a consistent place on the page? @prayuthnaduthota

PDF Parser

We need a functioning PDF parser for an individuals earning records.

  • Status?
    If we have working code:
    - Test with large dataset (team's earning records).
    - Add to React App.
    If not:
    - Write PDF parser (Tesseract?)
    -Test sets: Individuals Earnings Records (get from MySSA)

Home Page - Windfall Awareness

For "why is this app useful?" we should add a statement of why this app is helpful

Currently here:
Why is this app useful?
While the Social Security administration provides some information on how WEP is calculated, this information is often difficult to find and understand. [need statement here]

BEFORE deleting the prescreen page, just copy that statement and add it to the home page to answer the above question
Other Recommendation: This app is a tool designed to help you better calculate WEP and understand the factors behind this calculation. This app can also be used to help you to plan your retirement years more effectively.

Pull out the functions from the observable notebook into a module

We have been having issues with contributors running gatsby develop and would like to be able to remove the notebook dependency from the gatsby app.

success run page queries - 0.068 s — 14/14 405.90 queries/second

 ERROR #98123  WEBPACK

Generating SSR bundle failed

Unexpected token (246:13)

File: node_modules/windfall-awareness-notebook-prototype/windfall-awareness-notebook-prototype.js:246:13

This will involve implementing the UI elements (sliders, date dropdown etc).

image

Lime Button Contrast`

The app got dinged an an a11y audit for poor contrast surrouning the lime buttons. I didn't want to make changes that a designer would just fix anyway when they got to it, so just pinning that to the 'to-do' list.

Add a question about the user's role

Add a question about the users role - are you a retiree/soon to retire person or are you someone helping someone - family member or case manager?

User testing "do-outs" to improve

Full document: https://docs.google.com/document/d/12EhDi9mjaw8ucwETHVALSEWOf0KgHDdsBh8DVd2SCGM/edit

Do-outs from 6/3 prelim testing (from @annemeeker):
Better explanatory text in the results card - define terms, explain what they are

  • 1 Add an instruction to double-check the uploaded earnings record to make sure it looks correct
  • 2. Instructions text on top of the sliders
  • 3. Make it clear that you have to enter the amt of your pension (and we need to have the lump sum vs. monthly broken out)
  • 4. Add a screen where we can add in the ‘political action’ etc points?
  • 5. Is it calculating AIME from the XML file? Didn’t change in the 3 user tests, but I was using the same numbers
  • 6. Can we change auto-fill from specific numbers to zeros?
  • 7. Let’s follow up on Sebastian’s flag that the AIME might not be working
  • 8. Breadcrumbs with the graphic take-people-through
  • 9. (Delete the page that needs deleting - the MPB one)
  • 10. Buttons for text size/high contrast - next to hamburger menu? Text enlarging?

Create an FAQ page

(@annemeeker to write answers)
How do I fight Windfall Elimination Provision?
Social security told me I had an overpayment. What do I do?
“How do I calculate spousal benefits?
“How do I know how much my pension is?”

Jobs to be done (based on revised use case breakdown)

Context: We re-reviewed the use cases and broke it down into the following:

  • Folks are 50-59 years old who are broken into folks
    - who have an online account and so have therefore received an earnings record in the mail
    - whether they are WEP eligible or not
  • Folks who have just retired (usually ages 60-62 years old) who:
    - may have an online account and so have received a mailer with their application confirmation
    - whether they are eligible for WEP or not
    - whether the calculation we output matches the mailer calculation or not.
    and folks who retired years ago).
  • For folks who have been retired for years. Within this group, there are people who:
    - have knowingly not reported pensions or not
    - whether they are eligible for WEP or not
    - whether the calculation we output matches the mailer calculation or not.
    - may have an online account or not
    - whether they have received an overpayment payment notice

The "jobs to be done" are as follows:

  • We address the immediate questions users will have based on the mailer they receive. If they receive an overpayment notice, they'll want an explanation for why. If they received their application confirmation or earnings record and noticed an error or something surprising, they will want reassurance that they can calculate their correct earnings and pension via this app.
  • We need to make it easy for people to get their earnings record whether or not they have an existing online account
  • We need to make it clear that WEP eligibility affects SSA calculations, benefits, and whether a user needs to repay a portion of their SSA. We are missing copy & logic that tells users whether they need to repay the SSA
  • We need to reassure users who have knowingly not reported pensions and are worried they might have to repay with additional marketing materials and changing the copy to be more trusting and reassure that all information is confidential
  • We need to clarify that this service can help pre-retirement users plan when to take retirement, help users who have just retired understand what their SSA benefits are, and help users who have been retired for multiple years understand whether and what they need to repay

This issue is written using concept of: https://jtbd.info/2-what-is-jobs-to-be-done-jtbd-796b82081cca
"Jobs to be Done is a theory of consumer action. It describes the mechanisms that cause a consumer to adopt an innovation."

Edits and clarifications for Benefit Formula page

And edited text:
minor edits:
Slides 9/3:
Brief:
“The Social Security Administration uses three main inputs to calculate your retirement benefits. Those three inputs are:

  1. Birthdate (if wrong, edit here)
  2. Retirement date, in this case, the slider (if wrong edit here)
  3. Average Indexed Monthly Earnings (double check your earnings record here)

Once the SSA has those inputs, they will go through three steps to calculate your final benefit amount.
We’ll walk you through these three steps in the following pages:”

Step 1: IF NOT AFFECTED BY WEP
The Social Security Administration calculates how much of your Averaged Indexed Monthly Earnings (based on your lifetime earnings record) fell below $895, based on the information you entered.
You get back 90% of what falls under $895.
Step 1: IF AFFECTED BY WEP
The Social Security Administration calculates how much of your Averaged Indexed Monthly Earnings (based on your lifetime earnings record) fell below $895, based on the information you entered.
The percentage you get back of your earnings below $895 depends on how many years you worked in a job where your employer paid Social Security taxes. Based on your earnings record, you have XYZ years of covered earnings.
[table showing % vs. years of substantial earnings]
This means that you get back % of your earnings in this amount back.
[See how the formula works for people who are NOT affected by WEP]
Step 2:
Next, the Social Security Administration calculates how much of your monthly income fell below $5397 based n the information you entered.
You get back 32% of your AIME that falls between $895 and $5397.
Step 3
Finally, the Social Security Administration calculates how much of your monthly income exceeds $5397 based on the information you entered.
You get back 15% of whatever monthly income was over $5397.
Final calculation
All of the amounts in red below are added together to determine your Primary Insurance Amount, or PIA.
Your total Primary Insurance Amount is $911.10.
$805.50 + $105.60 + $0.00 = $911.10
This amount changes depending on when you retire. If you take your benefits early (as early as 62), Social Security reduces your benefits. If you take your benefits later (up to age 70), Social Security increases your benefits.
[can we put the sliders here again? Or a link back to the results screen with the sliders?]
Commonly Asked Questions
I got a letter from the Social Security Administration telling me that I have an overpayment. What do I do?
I don’t think this is fair. What can I do to get involved?
[find your representative]
I think Social Security made a mistake in my calculation. Who can I talk to?
[link to print my results]
[link to civicapp] (edited)

Rick's slides:
https://cfb-public.slack.com/archives/CG08M4KN3/p1566960359081500

Legal disclaimer

must say that this is:

  1. not endorsed by the ssa
  2. intended for educational purposes, not financial counseling
  3. SWM office and CfB do not take on any liability

PreScreen 2 Upload Earning Records

Could have check marks pop up after users plugs in number

  • X mark if entered incorrectly

If there is nothing submitted in the field we could have a pop up that says you entered $0.00 for year 1999, is this correct? Yes or No

Slider on Step 1 for retirement age

Options:

  1. Make it more obvious that they MUST interact with the slider to move on
  2. Make it an 'enter age to collect SSA' box instead of a slider
  3. Keep default

AIME Calculations fails on sub-35 earnings records

The getAIMEFromEarnings calculation expects that the user provides an earnings record with, at minimum, 35 years. If the user has <35 records, the output will be NaN on the final value page.

Currently setting up a testing framework so we can refactor the code for this.

Earnings -> AIME

Translate "working" getAIME() into React App or notebook.

If code works, localize to the correct demo screen page; move to Tests board -> getAIME() Test

Support retirement planning: show earnings record up to 2 years beyond today

Future Projections

Here were the three things that each needed some kind of tactic for their projection:
• A person's earnings into the future
• Avg & Maximum US-wide SSA Wages tables
• SSA Bendpoints (largely based on cost of living adjustments (COLA) multiples?)

Earnings:

Manual projection: the user inputs each future year manually. No extrapolation calculations on our end.
New Parameters: None, but the earnings record must be changed to allow entry for future years.
Pros: No calculations on our end; we’re not responsible for any mistakes
Cons: Is only as accurate as the user’s predictions

Tabular Extrapolation: we use the values we got from from the trustee report, which specify predicted increases in average wages, to extrapolate the user’s future wages from existing records.
New Parameters: the year from which to extrapolate future data - this will commonly be the most recent year in which the user has earnings, but may differ in the case that the user has years of unusual earnings not suitable to extract from.
Pros: Uses well-researched values provided by an unaffiliated organization; puts very little burden on the user
Cons: Computation intensive; puts very little burden on the user – and thus, makes us seem most responsible for inaccuracies.

Manual Extrapolation: a mix of Manual Projection and Tabular Extrapolation: uses user defined percentages to extrapolate future values from existing records.
New Parameters: the year from which to extrapolate future data; a table of percentage values
Pros: Gives control to the user while taking the burden of calculation away from them
Cons: As computation intensive as Tabular Extrapolation; is only as accurate as the user’s predictions; most likely to utterly confuse an ill-qualified user

Static Extrapolation: like tabular extrapolation, but uses a single, static value to calculate Wage Growth. Note: this number may be selected from a set of options, or we may allow manual entry.
New Parameters: the year from which to extrapolate user data; a percentage value to use for yearly increase
Pros: Least susceptible to “noise” and attempts to be overly clever in predictions; easy to understand
Cons: May sacrifice too much accuracy for simplicity; if the percentage may be manually entered, is only as accurate as the user’s predictions.

Average Wages & Maximum Earnings:

Tabular Extrapolation: use our stored wage growth values to extrapolate future years of average wages from the last known year.
New Parameters: None
Pros: Uses well-researched values provided by an unaffiliated organization; puts very little burden on the user
Cons: Computation intensive; puts very little burden on the user – and thus, makes us seem most responsible for inaccuracies.

Static Extrapolation: like tabular extrapolation, but uses a single, static value to calculate Wage Growth. Note: this number may be selected from a set of options, or we may allow manual entry.
New Parameters: a percentage value to use for yearly increase
Pros: Least susceptible to “noise” and attempts to be overly clever in predictions; easy to understand
Cons: May sacrifice too much accuracy for simplicity; if the percentage may be manually entered, is only as accurate as the user’s predictions.

Manual Extrapolation (?!): have the user enter percentages by which they believe average wages will increase for each year.
New Parameters: an entire table of percentages
Pros: ~1% chance the user knows something very specific that the trustee report doesn’t account for
Cons: 99% chance it gives users a new way to make horrible mistakes

Bendpoints and COLA

Further investigation needed. See tables below.

(the above is based on a Word Document by @supjohn)

Other Details to incorporate above:

https://cfb-public.slack.com/archives/CG08M4KN3/p1575418598247600

How SSA Detailed Calculator app, called AnyPIA helps users do projections, in screenshots: https://cfb-public.slack.com/archives/CG08M4KN3/p1562009569050800?thread_ts=1562003269.042200&cid=CG08M4KN3

Patterns we've observed between SSA Detail Calculator updates and SSA Trustee Reports

Updates are roughly twice-per year

Whiteboard discussion of above projection tactics

image

https://cfb-public.slack.com/archives/CG08M4KN3/p1563925431005000
image
Page 16 from Trustees report 2019.2

image
Page 99 from Trustees report 2019.2

https://cfb-public.slack.com/archives/CG08M4KN3/p1563926600006400
image

Step components from ProgressTracker inaccurate

Issue can be replicated on Chrome; after navigating to a page within the Windfall Elimination web app, if a user copies the current URL into a new tab, the "status" of some StyledStep components (e.g. "complete", "active", "ongoing") becomes inaccurate.

Earnings -> YSE

Calculate Years of Substantial Earnings (YSE) from user-inputted earnings records.

If code works, localize to the correct demo screen page; move to Tests board -> getAIME() Test

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.