added state wage record, but it isn't quite right
This commit is contained in:
parent
068f1bbae4
commit
179f67bac9
3 changed files with 120 additions and 48 deletions
|
@ -6,16 +6,17 @@ RECORD_TYPES = [
|
||||||
'EmployeeWageRecord',
|
'EmployeeWageRecord',
|
||||||
'OptionalEmployeeWageRecord',
|
'OptionalEmployeeWageRecord',
|
||||||
'TotalRecord',
|
'TotalRecord',
|
||||||
|
'StateWageRecord',
|
||||||
'OptionalTotalRecord',
|
'OptionalTotalRecord',
|
||||||
'StateTotalRecord',
|
'StateTotalRecord',
|
||||||
'FinalRecord',
|
'FinalRecord'
|
||||||
]
|
]
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
import record, model
|
import record, model
|
||||||
for rname in RECORD_TYPES:
|
for rname in RECORD_TYPES:
|
||||||
inst = record.__dict__[rname]()
|
inst = record.__dict__[rname]()
|
||||||
print type(inst), len(inst.output())
|
print type(inst), inst.record_identifier, len(inst.output())
|
||||||
|
|
||||||
|
|
||||||
def test_dump():
|
def test_dump():
|
||||||
|
|
|
@ -32,7 +32,6 @@ class Field(object):
|
||||||
def read(self, fp):
|
def read(self, fp):
|
||||||
if fp.tell() + self.max_length <= fp.len:
|
if fp.tell() + self.max_length <= fp.len:
|
||||||
data = fp.read(self.max_length)
|
data = fp.read(self.max_length)
|
||||||
print self, self.max_length, data
|
|
||||||
return self.parse(data)
|
return self.parse(data)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -87,7 +86,6 @@ class StaticField(TextField):
|
||||||
self._value = value
|
self._value = value
|
||||||
|
|
||||||
def parse(self, s):
|
def parse(self, s):
|
||||||
print 'STATIC', self.max_length, s, len(s)
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class BlankField(TextField):
|
class BlankField(TextField):
|
||||||
|
@ -124,3 +122,6 @@ class MoneyField(Field):
|
||||||
def parse(self, s):
|
def parse(self, s):
|
||||||
self.value = decimal.Decimal(s) * decimal.Decimal('0.01')
|
self.value = decimal.Decimal(s) * decimal.Decimal('0.01')
|
||||||
|
|
||||||
|
class DateField(TextField):
|
||||||
|
#FIXME I NEED TO BE WRITTEN!
|
||||||
|
pass
|
||||||
|
|
154
record.py
154
record.py
|
@ -93,31 +93,31 @@ class EmployeeWageRecord(model.Model):
|
||||||
foreign_state = TextField(max_length=23, required=False)
|
foreign_state = TextField(max_length=23, required=False)
|
||||||
foreign_postal_code = TextField(max_length=15, required=False)
|
foreign_postal_code = TextField(max_length=15, required=False)
|
||||||
country = TextField(max_length=2)
|
country = TextField(max_length=2)
|
||||||
wages_tips = NumericField(max_length=11)
|
wages_tips = MoneyField(max_length=11)
|
||||||
federal_income_tax_withheld = NumericField(max_length=11)
|
federal_income_tax_withheld = MoneyField(max_length=11)
|
||||||
social_security_wages = NumericField(max_length=11)
|
social_security_wages = MoneyField(max_length=11)
|
||||||
social_security_tax_withheld = NumericField(max_length=11)
|
social_security_tax_withheld = MoneyField(max_length=11)
|
||||||
medicare_wages_and_tips = NumericField(max_length=11)
|
medicare_wages_and_tips = MoneyField(max_length=11)
|
||||||
medicare_tax_withheld = NumericField(max_length=11)
|
medicare_tax_withheld = MoneyField(max_length=11)
|
||||||
social_security_tips = NumericField(max_length=11)
|
social_security_tips = MoneyField(max_length=11)
|
||||||
advance_eic = NumericField(max_length=11)
|
advance_eic = MoneyField(max_length=11)
|
||||||
dependent_care_benefits = NumericField(max_length=11)
|
dependent_care_benefits = MoneyField(max_length=11)
|
||||||
deferred_compensation_401k = NumericField(max_length=11)
|
deferred_compensation_401k = MoneyField(max_length=11)
|
||||||
deferred_compensation_403b = NumericField(max_length=11)
|
deferred_compensation_403b = MoneyField(max_length=11)
|
||||||
deferred_compensation_408k = NumericField(max_length=11)
|
deferred_compensation_408k = MoneyField(max_length=11)
|
||||||
deferred_compensation_457b = NumericField(max_length=11)
|
deferred_compensation_457b = MoneyField(max_length=11)
|
||||||
deferred_compensation_501c = NumericField(max_length=11)
|
deferred_compensation_501c = MoneyField(max_length=11)
|
||||||
military_pay = NumericField(max_length=11)
|
military_pay = MoneyField(max_length=11)
|
||||||
non_qualified_457 = NumericField(max_length=11)
|
non_qualified_457 = MoneyField(max_length=11)
|
||||||
employer_contrib_to_hsa = NumericField(max_length=11)
|
employer_contrib_to_hsa = MoneyField(max_length=11)
|
||||||
non_qualified_not_457 = NumericField(max_length=11)
|
non_qualified_not_457 = MoneyField(max_length=11)
|
||||||
nontaxable_combat_pay = NumericField(max_length=11)
|
nontaxable_combat_pay = MoneyField(max_length=11)
|
||||||
blank2 = BlankField(max_length=11)
|
blank2 = BlankField(max_length=11)
|
||||||
cost_of_premiums_for_insurance = NumericField(max_length=11)
|
cost_of_premiums_for_insurance = MoneyField(max_length=11)
|
||||||
income_nonstatutory_stock_opts = NumericField(max_length=11)
|
income_nonstatutory_stock_opts = MoneyField(max_length=11)
|
||||||
deferred_compensation_409a = NumericField(max_length=11)
|
deferred_compensation_409a = MoneyField(max_length=11)
|
||||||
designated_roth_contrib_401k = NumericField(max_length=11)
|
designated_roth_contrib_401k = MoneyField(max_length=11)
|
||||||
designated_roth_contrib_403b = NumericField(max_length=11)
|
designated_roth_contrib_403b = MoneyField(max_length=11)
|
||||||
blank3 = BlankField(max_length=23)
|
blank3 = BlankField(max_length=23)
|
||||||
statutory_employee_indicator = BooleanField()
|
statutory_employee_indicator = BooleanField()
|
||||||
blank4 = BlankField(max_length=1)
|
blank4 = BlankField(max_length=1)
|
||||||
|
@ -130,32 +130,102 @@ class OptionalEmployeeWageRecord(model.Model):
|
||||||
record_identifier = 'RO'
|
record_identifier = 'RO'
|
||||||
|
|
||||||
blank1 = BlankField(max_length=9)
|
blank1 = BlankField(max_length=9)
|
||||||
allocated_tips = NumericField(max_length=11)
|
allocated_tips = MoneyField(max_length=11)
|
||||||
uncollected_tax_on_tips = NumericField(max_length=11)
|
uncollected_tax_on_tips = MoneyField(max_length=11)
|
||||||
medical_savings_account = NumericField(max_length=11)
|
medical_savings_account = MoneyField(max_length=11)
|
||||||
simple_retirement_account = NumericField(max_length=11)
|
simple_retirement_account = MoneyField(max_length=11)
|
||||||
qualified_adoption_expenses = NumericField(max_length=11)
|
qualified_adoption_expenses = MoneyField(max_length=11)
|
||||||
uncollected_ss_life_ins = NumericField(max_length=11)
|
uncollected_ss_life_ins = MoneyField(max_length=11)
|
||||||
uncollected_medicare_life_ins = NumericField(max_length=11)
|
uncollected_medicare_life_ins = MoneyField(max_length=11)
|
||||||
income_under_409a = NumericField(max_length=11)
|
income_under_409a = MoneyField(max_length=11)
|
||||||
hire_exempt_wages_and_tips = NumericField(max_length=11)
|
hire_exempt_wages_and_tips = MoneyField(max_length=11)
|
||||||
blank2 = BlankField(max_length=164)
|
blank2 = BlankField(max_length=164)
|
||||||
wages_subject_to_puerto_rico_tax = NumericField(max_length=11, required=False)
|
wages_subject_to_puerto_rico_tax = MoneyField(max_length=11, required=False)
|
||||||
commissions_subject_to_puerto_rico_tax = NumericField(max_length=11, required=False)
|
commissions_subject_to_puerto_rico_tax = MoneyField(max_length=11, required=False)
|
||||||
allowances_subject_to_puerto_rico_tax = NumericField(max_length=11, required=False)
|
allowances_subject_to_puerto_rico_tax = MoneyField(max_length=11, required=False)
|
||||||
tips_subject_to_puerto_rico_tax = NumericField(max_length=11, required=False)
|
tips_subject_to_puerto_rico_tax = MoneyField(max_length=11, required=False)
|
||||||
total_wages_subject_to_puerto_rico_tax = NumericField(max_length=11, required=False)
|
total_wages_subject_to_puerto_rico_tax = MoneyField(max_length=11, required=False)
|
||||||
puerto_rico_tax_withheld = NumericField(max_length=11, required=False)
|
puerto_rico_tax_withheld = MoneyField(max_length=11, required=False)
|
||||||
retirement_fund_contrib = NumericField(max_length=11, required=False)
|
retirement_fund_contrib = MoneyField(max_length=11, required=False)
|
||||||
blank3 = BlankField(max_length=11)
|
blank3 = BlankField(max_length=11)
|
||||||
total_wages_tips_virgin_islands = NumericField(max_length=11, required=False)
|
total_wages_tips_virgin_islands = MoneyField(max_length=11, required=False)
|
||||||
virgin_islands_income_tax_withheld = NumericField(max_length=11, required=False)
|
virgin_islands_income_tax_withheld = MoneyField(max_length=11, required=False)
|
||||||
blank4 = BlankField(max_length=128)
|
blank4 = BlankField(max_length=128)
|
||||||
|
|
||||||
|
|
||||||
|
class StateWageRecord(model.Model):
|
||||||
|
record_identifier = 'RS'
|
||||||
|
|
||||||
|
state_code = NumericField(max_length=2)
|
||||||
|
taxing_entity_code = TextField(max_length=5)
|
||||||
|
ssn = NumericField(max_length=9, required=False)
|
||||||
|
employee_first_name = TextField(max_length=15)
|
||||||
|
employee_middle_name = TextField(max_length=15)
|
||||||
|
employee_last_name = TextField(max_length=20)
|
||||||
|
employee_suffix = TextField(max_length=4)
|
||||||
|
location_address = TextField(max_length=22)
|
||||||
|
delivery_address = TextField(max_length=22)
|
||||||
|
city = TextField(max_length=22)
|
||||||
|
state = StateField()
|
||||||
|
zipcode = TextField(max_length=5, required=False)
|
||||||
|
zipcode_ext = TextField(max_length=4, required=False)
|
||||||
|
blank1 = BlankField(max_length=5)
|
||||||
|
foreign_state_province = TextField(max_length=23, required=False)
|
||||||
|
foreign_postal_code = TextField(max_length=15, required=False)
|
||||||
|
country_code = TextField(max_length=2)
|
||||||
|
optional_code = TextField(max_length=2, required=False)
|
||||||
|
reporting_period = NumericField(max_length=6) # MAYBE MAKE A CUSTOM FIELD TYPE FOR THIS
|
||||||
|
quarterly_unemp_ins_wages = MoneyField(max_length=11)
|
||||||
|
quarterly_unemp_ins_taxable_wages = MoneyField(max_length=11)
|
||||||
|
number_of_weeks_worked = NumericField(max_length=2)
|
||||||
|
date_first_employed = TextField(max_length=8)#DateField()
|
||||||
|
date_of_separation = TextField(max_length=8)#DateField()
|
||||||
|
blank2 = BlankField(max_length=5)
|
||||||
|
state_code_2 = NumericField(max_length=2)
|
||||||
|
state_taxable_wages = MoneyField(max_length=11)
|
||||||
|
state_income_tax_wh = MoneyField(max_length=11)
|
||||||
|
other_state_data = TextField(max_length=10)
|
||||||
|
tax_type_code = TextField(max_length=1) # VALIDATE C, D, E, or F
|
||||||
|
local_taxable_wages = MoneyField(max_length=11)
|
||||||
|
local_income_tax_wh = MoneyField(max_length=11)
|
||||||
|
state_control_number = NumericField(max_length=7, required=False)
|
||||||
|
supplemental_data1 = TextField(max_length=75)
|
||||||
|
supplemental_data2 = TextField(max_length=75)
|
||||||
|
blank3 = BlankField(max_length=25)
|
||||||
|
|
||||||
class TotalRecord(model.Model):
|
class TotalRecord(model.Model):
|
||||||
record_identifier = 'RT'
|
record_identifier = 'RT'
|
||||||
|
|
||||||
|
number_of_rw_records = NumericField(max_length=7)
|
||||||
|
wages_tips = NumericField(max_length=15)
|
||||||
|
federal_income_tax_withheld = NumericField(max_length=15)
|
||||||
|
social_security_wages = NumericField(max_length=15)
|
||||||
|
social_security_tax_withheld = NumericField(max_length=15)
|
||||||
|
medicare_wages_and_tips = NumericField(max_length=15)
|
||||||
|
medicare_tax_withheld = NumericField(max_length=15)
|
||||||
|
social_security_tips = NumericField(max_length=15)
|
||||||
|
advance_eic = NumericField(max_length=15)
|
||||||
|
dependent_care_benefits = NumericField(max_length=15)
|
||||||
|
deferred_compensation_401k = NumericField(max_length=15)
|
||||||
|
deferred_compensation_403b = NumericField(max_length=15)
|
||||||
|
deferred_compensation_408k = NumericField(max_length=15)
|
||||||
|
deferred_compensation_457b = NumericField(max_length=15)
|
||||||
|
deferred_compensation_501c = NumericField(max_length=15)
|
||||||
|
military_pay = NumericField(max_length=15)
|
||||||
|
non_qualified_457 = NumericField(max_length=15)
|
||||||
|
employer_contrib_to_hsa = NumericField(max_length=15)
|
||||||
|
non_qualified_not_457 = NumericField(max_length=15)
|
||||||
|
nontaxable_combat_pay = NumericField(max_length=15)
|
||||||
|
blank1 = BlankField(max_length=15)
|
||||||
|
employer_cost_term_life_ins = NumericField(max_length=15)
|
||||||
|
income_tax_wh_sick_pay = NumericField(max_length=15)
|
||||||
|
income_exercise_nonstat_stock_opts = NumericField(max_length=15)
|
||||||
|
deferred_409a_compensation_plan = NumericField(max_length=15)
|
||||||
|
designated_roth_contribs_401k = NumericField(max_length=15)
|
||||||
|
disignated_roth_contribs_403b = NumericField(max_length=15)
|
||||||
|
blank2 = BlankField(max_length=113)
|
||||||
|
|
||||||
|
|
||||||
class OptionalTotalRecord(model.Model):
|
class OptionalTotalRecord(model.Model):
|
||||||
record_identifier = 'RU'
|
record_identifier = 'RU'
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue