codeforboston / cliff-effects

Cliff effects guidance prototype (archived)

Home Page:https://codeforboston.github.io/cliff-effects/#/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Create pause-able search for cliffs on a local machine

knod opened this issue · comments

commented

If one or more of us can run a search in terminal to try to track down cliffs, specifically in SNAP, that could be useful. There would be millions of runs. We'd either need to be able to pause or to chunk it into different runs so that it doesn't have to just run forever on everyone's machine.

It'd also be nice to save the output. We could possibly use it later to test against already-existing SNAP calculators.

We'll try to describe some of the parameters for that in here.

commented

So, some parameters. This is different from testing our calculations because we're not testing for changes in all kinds of behavior. This is not completely optimized for SNAP values but is a good start.

Key:

  • Anything that is a value can stay that value always.
  • Anything that is a type can vary in the ways described in comments.
{
hasSnap:     true,
// Household:
// Must try combos of 1 member to... 7? I'll have to double check that one
// Important factors:
// - No disabled head vs. 1 disabled head
// - No head over 62 vs. 1 head over 62
// - No disabled member vs. 1 disabled member
// - Nobody over 62 vs. 1 person over 62
// - Nobody under 18 vs. 1 person
// - Nobody under 13 vs. 1 person (have to double check this)
// Those need to be checked when they overlap, like an elderly
// and disabled person, but you don't need to duplicate them.
// E.g. you don't need two people that are under 13.
// Example: head is over 62 and disabled,
// one other member is elderly and disabled.
// Spouse doesn't matter. Functionally the same as head.
household:   [
  // Always head of household
  {
    m_age:      integer,  // 30, 65
    m_role:     `head`,
    m_disabled: bool,  // false, true
  },
  // Other members: 0 to... 6? 9? Need to check on that
  {
    m_age:      integer, // 2, 17, 30, 65
    m_role:     `member`,
    m_disabled: bool, // false, true
  },
],
// Earned income: from 0 to... 5k per month in increments of...
// $80? That's a 50 cent raise for 40 hrs per week.
earned:                        integer,
// Unearned income: Only one of these needs to change. Same as income, I guess...? Less?
TAFDC:                         integer,
SSI:                           0,
SSDI:                          0,
childSupportIn:                0,
unemployment:                  0,
workersComp:                   0,
pension:                       0,
socialSecurity:                0,
alimony:                       0,
otherIncome:                   0,
// Childcare expenses: only one needs to change. From 0
// to ? in increments of ?
childDirectCare:               integer,
childBeforeAndAfterSchoolCare: 0,
childTransportation:           0,
childOtherCare:                0,
// Earned from: from 0 to matching up with the amount of `childDirectCare`
earnedBecauseOfChildCare:      integer,
// From 0 to ? in increments of ?
childSupportPaidOut:           integer,
// From 0 to ? in increments of ?
adultDirectCare:               integer,
adultTransportation:           0,
adultOtherCare:                0,
// From 0 to ? in increments of ?
disabledAssistance:            integer,
// Earned from:  From 0 to matching up with the amount of `disabledAssistance`
earnedBecauseOfAdultCare:      integer,
// From 0 to ? in increments of ?
disabledMedical:               integer,
// From 0 to ? in increments of ?
otherMedical:                  integer,
// Housing expenses
housing:                       string,  // `homeless`, `homeowner`, `renter`, `voucher`
// `contractRent` and `rentShare` only if `housing === `voucher``
// From 800 to 3k? in increments of ?
contractRent:                  integer,
// From 0 to same amount as `contractRent` in increments of ?
rentShare:                     integer,
// `rent` only if `housing === `renter``
// From 800 to 3k? in increments of ?
rent:                          integer,
// `morgage` only if `housing === `homeowner``
// From ? to ? in increments of ?
mortgage:                      integer,
// Last two housing things just get summed up with `mortgage`
housingInsurance:              0,
propertyTax:                   0,
// Utilities only if `housing !== `homeless``
// Only do one of these at a time for the purposes of this cliff search
climateControl:                bool,  // false, true
nonHeatElectricity:            bool,  // false, true
phone:                         bool,  // false, true
// Don't worry about fuelAssistance (same as `climateControl`)
fuelAssistance:                false,
// Ignore all 'otherExpenses'
otherExpensesFood:             0,
otherExpensesUtilities:        0,
otherExpensesCable:            0,
otherExpensesMedical:          0,
otherExpensesTransport:        0,
otherExpensesCareProducts:     0,
otherExpensesClothes:          0,
otherExpensesPhone:            0,
otherExpensesEntertainment:    0,
otherExpensesOther:            0,
wantsToSeeOtherExpenses:       false,
}

Definitely feel free to ask clarifying questions because, though I've done my best, this may not all be quite right.

commented

So it might be the case that there are no cliffs in SNAP since 2016. We may want to consider that.

As a side note, I think disabled and elderly might work out to be the same thing.