added state wage record, but it isn't quite right

This commit is contained in:
Binh 2011-04-09 15:17:32 -05:00
parent 068f1bbae4
commit 179f67bac9
3 changed files with 120 additions and 48 deletions

View file

@ -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():

View file

@ -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

158
record.py
View file

@ -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)
@ -129,33 +129,103 @@ class EmployeeWageRecord(model.Model):
class OptionalEmployeeWageRecord(model.Model): 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'