added the first 3 record definitions

This commit is contained in:
Mark Riedesel 2011-03-30 21:17:00 -05:00
parent e12557db2d
commit 83e2a0cda9
3 changed files with 157 additions and 3 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*.pyc

View file

@ -5,11 +5,12 @@ class ValidationError(Exception):
class Field(object):
creation_counter = 0
def __init__(self, name=None, max_length=0, required=True):
def __init__(self, name=None, max_length=0, required=True, uppercase=True):
self.name = name
self._value = None
self.max_length = max_length
self.required = required
self.uppercase = uppercase
self.creation_counter = Field.creation_counter
Field.creation_counter += 1
@ -30,7 +31,6 @@ class Field(object):
def __repr__(self):
return self.name
class TextField(Field):
def validate(self):
if self.value == None and self.required:
@ -39,12 +39,44 @@ class TextField(Field):
raise ValidationError("value is too long")
def get_data(self):
return (self.value or "").encode('ascii').ljust(self.max_length)
value = self.value or ""
if self.uppercase:
value = value.upper()
return value.ljust(self.max_length).encode('ascii')
class StateField(TextField):
def __init__(self, name=None, required=True):
return super(StateField, self).__init__(name=name, max_length=2, required=required)
class EmailField(TextField):
def __init__(self, name=None, required=True, max_length=None):
return super(EmailField, self).__init__(name=name, max_length=max_length,
required=required, uppercase=False)
class NumericField(TextField):
def validate(self):
super(NumericField, self).validate()
try:
int(self.value)
except ValueError:
raise ValidationError("field contains non-numeric characters")
class StaticField(TextField):
def __init__(self, name=None, required=True, value=None):
super(StaticField, self).__init__(name=name, required=required,
max_length=len(value))
self._value = value
class BlankField(TextField):
def get_data(self):
return " " * self.max_length
class BooleanField(Field):
def validate(self):
pass
def get_data(self):
return '1' if self._value else '0'
class MoneyField(Field):
def validate(self):
if self.value == None and self.required:

121
record.py Normal file
View file

@ -0,0 +1,121 @@
from fields import *
import model
class SubmitterRecord(model.Model):
record_identifier = StaticField(value='ra')
submitter_ein = NumericField(max_length=9)
user_id = TextField(max_length=8)
software_vendor = TextField(max_length=4)
blank1 = BlankField(max_length=5)
resub_indictator = BooleanField()
resub_identifier = TextField(max_length=6, required=False)
software_code = StaticField(value='98') # In-house program
company_name = TextField(max_length=57)
company_address = TextField(max_length=22)
company_delivery_address = TextField(max_length=22)
company_city = TextField(max_length=22)
company_state = StateField()
company_zipcode = TextField(max_length=5)
company_zipcode_ext = TextField(max_length=4, required=False)
blank2 = BlankField(max_length=5)
company_foreign_state_province= TextField(max_length=23, required=False)
company_foreign_postal_code = TextField(max_length=15, required=False)
company_country_code = TextField(max_length=2)
submitter_name = TextField(max_length=57)
submitter_address = TextField(max_length=22)
submitter_delivery_address = TextField(max_length=22)
submitter_city = TextField(max_length=22)
submitter_state = StateField()
submitter_zipcode = TextField(max_length=5)
submitter_zipcode_ext = TextField(max_length=4, required=False)
blank3 = BlankField(max_length=5)
submitter_foreign_state_province = TextField(max_length=23, required=False)
submitter_foreign_postal_code = TextField(max_length=15, required=False)
submitter_country_code = TextField(max_length=2)
contact_name = TextField(max_length=27)
contact_phone = TextField(max_length=15)
contact_phone_ext = TextField(max_length=5, required=False)
blank4 = BlankField(max_length=3)
contact_email = EmailField(max_length=40)
blank5 = BlankField(max_length=3)
contact_fax = TextField(max_length=10, required=False)
preferred_notification = TextField(max_length=1)
preparer_code = TextField(max_length=1)
blank6 = BlankField(max_length=12)
class EmployerRecord(model.Model):
record_identifier = StaticField(value='re')
tax_year = NumericField(max_length=4)
agent_indicator = NumericField(max_length=1)
employer_ein = TextField(max_length=9)
agent_for_ein = TextField(max_length=9, required=False)
terminating_business_indicator = BooleanField()
establishment_number = TextField(max_length=4, required=False)
other_ein = TextField(max_length=9, required=False)
employer_name = TextField(max_length=57)
location_address = TextField(max_length=22)
delivery_address = TextField(max_length=22)
city = TextField(max_length=22)
state = StateField()
zipcode = TextField(max_length=5)
zipcode_ext = TextField(max_length=4, required=False)
blank1 = BlankField(max_length=5)
foreign_state_province = TextField(max_length=23)
foreign_postal_code = TextField(max_length=15)
country_code = TextField(max_length=2, required=False)
employment_code = TextField(max_length=1)
tax_jurisdiction_code = TextField(max_length=1)
third_party_sick_pay = BooleanField()
blank2 = BlankField(max_length=291)
class EmployeeWageRecord(model.Model):
record_identifier = StaticField(value='rw')
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 = TextField(max_length=23, required=False)
foreign_postal_code = TextField(max_length=15, required=False)
country = TextField(max_length=2)
wages_tips = NumericField(max_length=11)
federal_income_tax_withheld = NumericField(max_length=11)
social_security_wages = NumericField(max_length=11)
social_security_tax_withheld = NumericField(max_length=11)
medicare_wages_and_tips = NumericField(max_length=11)
medicare_tax_withheld = NumericField(max_length=11)
social_security_tips = NumericField(max_length=11)
advance_eic = NumericField(max_length=11)
dependent_care_benefits = NumericField(max_length=11)
deferred_compensation_401k = NumericField(max_length=11)
deferred_compensation_403b = NumericField(max_length=11)
deferred_compensation_408k = NumericField(max_length=11)
deferred_compensation_457b = NumericField(max_length=11)
deferred_compensation_501c = NumericField(max_length=11)
military_pay = NumericField(max_length=11)
non_qualified_457 = NumericField(max_length=11)
employer_contrib_to_hsa = NumericField(max_length=11)
non_qualified_not_457 = NumericField(max_length=11)
nontaxable_combat_pay = NumericField(max_length=11)
blank2 = BlankField(max_length=11)
cost_of_premiums_for_insurance = NumericField(max_length=11)
income_nonstatutory_stock_opts = NumericField(max_length=11)
deferred_compensation_409a = NumericField(max_length=11)
designated_roth_contrib_401k = NumericField(max_length=11)
designated_roth_contrib_403b = NumericField(max_length=11)
blank3 = BlankField(max_length=23)
statutory_employee_indicator = BooleanField()
blank4 = BlankField(max_length=1)
retirement_plan_indicator = BooleanField()
third_party_sick_pay = BooleanField()
blank5 = BlankField(max_length=23)