|  | var fs = require("fs"); | 
        
          |  | var util = require("util"); | 
        
          |  |  | 
        
          |  | var GET_URL = "https://www.freefilefillableforms.com/quadf/service/taxreturn/form/get"; | 
        
          |  |  | 
        
          |  | var forms = { | 
        
          |  | F1040: {}, | 
        
          |  | F8582W15: {}, | 
        
          |  | FSCHA: {}, | 
        
          |  | FSCHE1: {} | 
        
          |  | }; | 
        
          |  |  | 
        
          |  | var filenames = fs.readdirSync("."); | 
        
          |  | for (var i = 0; i < filenames.length; i++) { | 
        
          |  | var filename = filenames[i]; | 
        
          |  | if (!filename.endsWith(".har")) { | 
        
          |  | continue; | 
        
          |  | } | 
        
          |  | var stat = fs.statSync(filename); | 
        
          |  | if (!stat.isFile()) { | 
        
          |  | continue; | 
        
          |  | } | 
        
          |  | var har = JSON.parse(fs.readFileSync(filename)); | 
        
          |  | for (var j = 0; j < har.log.entries.length; j++) { | 
        
          |  | var entry = har.log.entries[j]; | 
        
          |  | if (entry.request.url != GET_URL) { | 
        
          |  | continue; | 
        
          |  | } | 
        
          |  | var post_json = JSON.parse(entry.request.postData.text); | 
        
          |  | if (post_json.taxYear != "2015" || post_json.agency != "fd") { | 
        
          |  | continue; | 
        
          |  | } | 
        
          |  | var form_id = null; | 
        
          |  | for (var k = 0; k < post_json.agencies.length; k++) { | 
        
          |  | var agency = post_json.agencies[k]; | 
        
          |  | if (agency.id == "S2015FDD" || agency.id == "S2015USFDD") { | 
        
          |  | for (var l = 0; l < agency.forms.length; l++) { | 
        
          |  | var form_id = agency.forms[l].id; | 
        
          |  | } | 
        
          |  | } | 
        
          |  | } | 
        
          |  | var response_json = JSON.parse(entry.response.content.text); | 
        
          |  | forms[form_id] = response_json.value.agencies[0].forms[0].fields; | 
        
          |  | } | 
        
          |  | } | 
        
          |  |  | 
        
          |  | /* | 
        
          |  | * To get a list of input cells, open b-k.github.io/1040.js, set the checkboxes | 
        
          |  | * as desired, and run the following snippet in the developer console. | 
        
          |  | * | 
        
          |  | * svg.selectAll(".u").each(function(i) { | 
        
          |  | *   console.log(g._nodes[i].form + "_" + g._nodes[i].baselabel); | 
        
          |  | * }); | 
        
          |  | */ | 
        
          |  |  | 
        
          |  | /* | 
        
          |  | * The FFFF documents are available at the following URLs. | 
        
          |  | * | 
        
          |  | * https://www.freefilefillableforms.com/data/fd/form/F1040.json | 
        
          |  | * https://www.freefilefillableforms.com/data/fd/form/FSCHA.json | 
        
          |  | * https://www.freefilefillableforms.com/data/fd/form/FSCHE1.json | 
        
          |  | * https://www.freefilefillableforms.com/data/fd/form/F8582W15.json | 
        
          |  | * | 
        
          |  | * Each entry field has an identifier, stored in the property "Id". All entered | 
        
          |  | * values are stored in the `get` JSON documents under "fields", with names | 
        
          |  | * equal to these identifiers. | 
        
          |  | */ | 
        
          |  |  | 
        
          |  | var avocados = { | 
        
          |  | // Note: Several FFFF input IDs don't match the line numbers on the form. | 
        
          |  | // Such line numbers were probably taken from previous years' forms. | 
        
          |  | f1040_wages: forms.F1040.L7 || 0, | 
        
          |  | f1040_interest: forms.F1040.L8A || 0, | 
        
          |  | f1040_dividends: forms.F1040.L9 || 0, | 
        
          |  | f1040_taxable_tax_refunds: forms.F1040.L10 || 0, | 
        
          |  | f1040_alimony: forms.F1040.L11 || 0, | 
        
          |  | f1040_sched_c: forms.F1040.L12 || 0, | 
        
          |  | f1040_cap_gains: forms.F1040.L13 || 0, | 
        
          |  | f1040_taxable_ira_income: forms.F1040.L15B || 0, | 
        
          |  | f1040_taxable_pension: forms.F1040.L16B || 0, | 
        
          |  | f1040_farm_income: forms.F1040.L18 || 0, | 
        
          |  | f1040_unemployment: forms.F1040.L19 || 0, | 
        
          |  | f1040_taxable_ss_benefits: forms.F1040.L20B || 0, | 
        
          |  | f1040_other_in: forms.F1040.L21 || 0, | 
        
          |  | f1040_credit_repayment: forms.F1040.L42 || 0,                   // Form 1040, Line 46 | 
        
          |  | f1040_obamacare_fee: forms.F1040.HLTHPEN || 0,                  // Form 1040, Line 61 | 
        
          |  | f1040_federal_tax_withheld: forms.F1040.L58 || 0,               // Form 1040, Line 64 | 
        
          |  | student_loan_ws_1040_student_loan_interest: forms.F1040.L24 || 0,//Form 1040, Line 33 (this is the number after clamping, FFFF has no place to enter the un-clamped student loan interest) | 
        
          |  | f1040_sched_a_medical_expenses: forms.FSCHA.L1 || 0, | 
        
          |  | f1040_sched_a_local_taxes: forms.FSCHA.L5 || 0, | 
        
          |  | f1040_sched_a_real_estate_taxes: forms.FSCHA.L6 || 0, | 
        
          |  | f1040_sched_a_property_taxes: forms.FSCHA.L7 || 0, | 
        
          |  | f1040_sched_a_other_taxes: forms.FSCHA.L8 || 0, | 
        
          |  | f1040_sched_a_reported_mort_interest: forms.FSCHA.L10 || 0, | 
        
          |  | f1040_sched_a_unreported_mort_interest: forms.FSCHA.L11 || 0, | 
        
          |  | f1040_sched_a_unreported_mort_points: forms.FSCHA.L12 || 0, | 
        
          |  | f1040_sched_a_mort_insurance_premia: forms.FSCHA.QUALMORT || 0, | 
        
          |  | f1040_sched_a_investment_interest: forms.FSCHA.L13 || 0,        // Schedule A, Line 14 | 
        
          |  | f1040_sched_a_charity_cash: forms.FSCHA.L15 || 0,               // Schedule A, Line 16 | 
        
          |  | f1040_sched_a_charity_noncash: forms.FSCHA.L16 || 0,            // Schedule A, Line 17 | 
        
          |  | f1040_sched_a_charity_carryover: forms.FSCHA.L17 || 0,          // Schedule A, Line 18 | 
        
          |  | f1040_sched_a_casualty_or_theft_losses: forms.FSCHA.L19 || 0,   // Schedule A, Line 20 | 
        
          |  | f1040_sched_a_employee_expenses: forms.FSCHA.L20 || 0,          // Schedule A, Line 21 | 
        
          |  | f1040_sched_a_tax_prep_fees: forms.FSCHA.L21 || 0,              // Schedule A, Line 22 | 
        
          |  | f1040_sched_a_other_work_expenses: forms.FSCHA.L22 || 0,        // Schedule A, Line 23 | 
        
          |  | f1040_sched_a_other_deductions: forms.FSCHA.L27 || 0,           // Schedule A, Line 28 | 
        
          |  | f1040_sched_e_rents_received: (forms.FSCHE1.LINE3B_L3_1_ || 0) + (forms.FSCHE1.LINE3B_L3_2_ || 0) + (forms.FSCHE1.LINE3B_L3_3_ || 0), | 
        
          |  | f1040_sched_e_royalties_received: (forms.FSCHE1.LINE4_L4_1_ || 0) + (forms.FSCHE1.LINE4_L4_2_ || 0) + (forms.FSCHE1.LINE4_L4_3_ || 0), | 
        
          |  | f1040_sched_e_advertising: (forms.FSCHE1.LINE5_L5_1_ || 0) + (forms.FSCHE1.LINE5_L5_2_ || 0) + (forms.FSCHE1.LINE5_L5_3_ || 0), | 
        
          |  | f1040_sched_e_auto_and_travel: (forms.FSCHE1.LINE6AT_L6AT_1_ || 0) + (forms.FSCHE1.LINE6AT_L6AT_2_ || 0) + (forms.FSCHE1.LINE6AT_L6AT_3_ || 0), | 
        
          |  | f1040_sched_e_cleaning_and_maintenance: (forms.FSCHE1.LINE7_L7_1_ || 0) + (forms.FSCHE1.LINE7_L7_2_ || 0) + (forms.FSCHE1.LINE7_L7_3_ || 0), | 
        
          |  | f1040_sched_e_commissions: (forms.FSCHE1.LINE8_L8_1_ || 0) + (forms.FSCHE1.LINE8_L8_2_ || 0) + (forms.FSCHE1.LINE8_L8_3_ || 0), | 
        
          |  | f1040_sched_e_insurance: (forms.FSCHE1.LINE9_L9_1_ || 0) + (forms.FSCHE1.LINE9_L9_2_ || 0) + (forms.FSCHE1.LINE9_L9_3_ || 0), | 
        
          |  | f1040_sched_e_professional_fees: (forms.FSCHE1.LINE10_L10_1_ || 0) + (forms.FSCHE1.LINE10_L10_2_ || 0) + (forms.FSCHE1.LINE10_L10_3_ || 0), | 
        
          |  | f1040_sched_e_management_fees: (forms.FSCHE1.LINE11_L11_1_ || 0) + (forms.FSCHE1.LINE11_L11_2_ || 0) + (forms.FSCHE1.LINE11_L11_3_ || 0), | 
        
          |  | f1040_sched_e_mortgage_interest: (forms.FSCHE1.LINE12_L12_1_ || 0) + (forms.FSCHE1.LINE12_L12_2_ || 0) + (forms.FSCHE1.LINE12_L12_3_ || 0), | 
        
          |  | f1040_sched_e_other_interest: (forms.FSCHE1.LINE13_L13_1_ || 0) + (forms.FSCHE1.LINE13_L13_2_ || 0) + (forms.FSCHE1.LINE13_L13_3_ || 0), | 
        
          |  | f1040_sched_e_repairs: (forms.FSCHE1.LINE14_L14_1_ || 0) + (forms.FSCHE1.LINE14_L14_2_ || 0) + (forms.FSCHE1.LINE14_L14_3_ || 0), | 
        
          |  | f1040_sched_e_supplies: (forms.FSCHE1.LINE15_L15_1_ || 0) + (forms.FSCHE1.LINE15_L15_2_ || 0) + (forms.FSCHE1.LINE15_L15_3_ || 0), | 
        
          |  | f1040_sched_e_taxes: (forms.FSCHE1.LINE16_L16_1_ || 0) + (forms.FSCHE1.LINE16_L16_2_ || 0) + (forms.FSCHE1.LINE16_L16_3_ || 0), | 
        
          |  | f1040_sched_e_utilities: (forms.FSCHE1.LINE17_L17_1_ || 0) + (forms.FSCHE1.LINE17_L17_2_ || 0) + (forms.FSCHE1.LINE17_L17_3_ || 0), | 
        
          |  | f1040_sched_e_depreciation: (forms.FSCHE1.LINE18_L20_1_ || 0) + (forms.FSCHE1.LINE18_L20_2_ || 0) + (forms.FSCHE1.LINE18_L20_3_ || 0), | 
        
          |  | f1040_sched_e_other_expenses: (forms.FSCHE1.OTHEREXP_L18A_1_ || 0) + (forms.FSCHE1.OTHEREXP_L18B_1_ || 0) + (forms.FSCHE1.OTHEREXP_L18C_1_ || 0), | 
        
          |  | f8582_ws1_8582_prior_loss: forms.F8582W15.TC1 || 0, // This assumes that all prior year loss entered here is related to rental real estate | 
        
          |  | }; | 
        
          |  |  | 
        
          |  | for (var id in avocados) { | 
        
          |  | var value = avocados[id]; | 
        
          |  | console.log("if (g._nodes." + id + ") {"); | 
        
          |  | console.log("  g._nodes." + id + ".val = " + value + ";"); | 
        
          |  | console.log("  fixboxsize(g._nodes." + id + ");"); | 
        
          |  | console.log("}"); | 
        
          |  | } | 
        
          |  | console.log("recalc();") |