ofxparse-0.14/0000775000175000017500000000000012210373440015017 5ustar jseutterjseutter00000000000000ofxparse-0.14/setup.cfg0000644000175000017500000000016012210373440016633 0ustar jseutterjseutter00000000000000[egg_info] tag_svn_revision = 0 tag_build = tag_date = 0 [aliases] release = register sdist bdist_egg upload ofxparse-0.14/PKG-INFO0000664000175000017500000000746412210373440016127 0ustar jseutterjseutter00000000000000Metadata-Version: 1.1 Name: ofxparse Version: 0.14 Summary: Tools for working with the OFX (Open Financial Exchange) file format Home-page: http://sites.google.com/site/ofxparse Author: Jerry Seutter Author-email: jseutter.ofxparse@gmail.com License: MIT License Description: ofxparse ======== ofxparse is a parser for Open Financial Exchange (.ofx) format files. OFX files are available from almost any online banking site, so they work well if you want to pull together your finances from multiple sources. Online trading accounts also provide account statements in OFX files. There are three different types of OFX files, called BankAccount, CreditAccount and InvestmentAccount files. This library has been tested with real-world samples of all three types. If you find a file that does not work with this library, please consider contributing the file so ofxparse can be improved. See the Help! section below for directions on how to do this. Example Usage ============= Here's a sample program:: from ofxparse import OfxParser ofx = OfxParser.parse(file('file.ofx')) ofx.accounts # An account with information ofx.account.number # The account number ofx.account.routing_number # The transit id (sometimes called branch number) ofx.account.statement # Account information for a period of time ofx.account.statement.start_date # The start date of the transactions ofx.account.statement.end_date # The end date of the transactions ofx.account.statement.transactions # A list of account activities ofx.account.statement.balance # The money in the account as of the statement date ofx.account.statement.available_balance # The money available from the account as of the statement date Help! ===== Sample .ofx files are very useful. If you want to help us out, please edit all identifying information from the file and then email it to jseutter dot ofxparse at gmail dot com. Development =========== Prerequisites:: (Ubuntu) sudo apt-get install python-beautifulsoup python-nose python-coverage-test-runner (pip) pip install BeautifulSoup nose coverage Tests:: Simply running the "nose" command should run the tests. If you don't have nose installed, the following might also work: python -m unittest tests.test_parse Test Coverage Report:: coverage run -m unittest tests.test_parse coverage html firefox htmlcov/index.html Homepage ======== http://sites.google.com/site/ofxparse License ======= ofxparse is released under an MIT license. See the LICENSE file for the actual license text. The basic idea is that if you can use Python to do what you are doing, you can also use this library. Keywords: ofx,Open Financial Exchange,file formats Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Developers Classifier: Natural Language :: English Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 2.5 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Utilities Classifier: License :: OSI Approved :: MIT License ofxparse-0.14/tests/0000775000175000017500000000000012210373440016161 5ustar jseutterjseutter00000000000000ofxparse-0.14/tests/__init__.py0000664000175000017500000000000012116146620020263 0ustar jseutterjseutter00000000000000ofxparse-0.14/tests/test_write.py0000664000175000017500000000064712176230107020736 0ustar jseutterjseutter00000000000000from __future__ import absolute_import from ofxparse import OfxParser as op from unittest import TestCase import sys sys.path.append('..') from .support import open_file class TestOfxWrite(TestCase): def test_write(self): test_file = open_file('fidelity.ofx') ofx_doc = op.parse(test_file) self.assertEqual(str(ofx_doc), "") if __name__ == "__main__": import unittest unittest.main() ofxparse-0.14/tests/test_parse.py0000664000175000017500000005371612176230107020723 0ustar jseutterjseutter00000000000000from __future__ import absolute_import from ofxparse.ofxparse import soup_maker from datetime import datetime, timedelta from decimal import Decimal from unittest import TestCase import sys sys.path.append('..') import six from .support import open_file from ofxparse import OfxParser, AccountType, Account, Statement, Transaction from ofxparse.ofxparse import OfxFile, OfxPreprocessedFile, OfxParserException class TestOfxPreprocessedFile(TestCase): def testPreprocess(self): fh = six.BytesIO(six.b("""OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE abNet2222Gross3333 """)) expect = """OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE abNet2222Gross3333 """ ofx_file = OfxPreprocessedFile(fh) data = ofx_file.fh.read() self.assertEqual(data,expect) def testHeaders(self): expect = {"OFXHEADER": six.u("100"), "DATA": six.u("OFXSGML"), "VERSION": six.u("102"), "SECURITY": None, "ENCODING": six.u("USASCII"), "CHARSET": six.u("1252"), "COMPRESSION": None, "OLDFILEUID": None, "NEWFILEUID": None, } ofx = OfxParser.parse(open_file('bank_medium.ofx')) self.assertEquals(expect, ofx.headers) def testUTF8(self): fh = six.BytesIO(six.b("""OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:UNICODE COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE """)) ofx_file = OfxPreprocessedFile(fh) headers = ofx_file.headers data = ofx_file.fh.read() self.assertTrue(type(data) is six.text_type) for key, value in six.iteritems(headers): self.assertTrue(type(key) is six.text_type) self.assertTrue(type(value) is not six.binary_type) def testCP1252(self): fh = six.BytesIO(six.b("""OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET: 1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE """)) ofx_file = OfxPreprocessedFile(fh) headers = ofx_file.headers result = ofx_file.fh.read() self.assertTrue(type(result) is six.text_type) for key, value in six.iteritems(headers): self.assertTrue(type(key) is six.text_type) self.assertTrue(type(value) is not six.binary_type) def testUTF8Japanese(self): fh = six.BytesIO(six.b("""OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:UTF-8 CHARSET:CSUNICODE COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE """)) ofx_file = OfxPreprocessedFile(fh) headers = ofx_file.headers result = ofx_file.fh.read() self.assertTrue(type(result) is six.text_type) for key, value in six.iteritems(headers): self.assertTrue(type(key) is six.text_type) self.assertTrue(type(value) is not six.binary_type) def testBrokenLineEndings(self): fh = six.BytesIO(six.b("OFXHEADER:100\rDATA:OFXSGML\r")) ofx_file = OfxPreprocessedFile(fh) self.assertEquals(len(ofx_file.headers.keys()), 2) class TestOfxFile(TestCase): def testHeaders(self): expect = {"OFXHEADER": six.u("100"), "DATA": six.u("OFXSGML"), "VERSION": six.u("102"), "SECURITY": None, "ENCODING": six.u("USASCII"), "CHARSET": six.u("1252"), "COMPRESSION": None, "OLDFILEUID": None, "NEWFILEUID": None, } ofx = OfxParser.parse(open_file('bank_medium.ofx')) self.assertEquals(expect, ofx.headers) def testUTF8(self): fh = six.BytesIO(six.b("""OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:UNICODE COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE """)) ofx_file = OfxFile(fh) headers = ofx_file.headers data = ofx_file.fh.read() self.assertTrue(type(data) is six.text_type) for key, value in six.iteritems(headers): self.assertTrue(type(key) is six.text_type) self.assertTrue(type(value) is not six.binary_type) def testCP1252(self): fh = six.BytesIO(six.b("""OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET: 1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE """)) ofx_file = OfxFile(fh) headers = ofx_file.headers result = ofx_file.fh.read() self.assertTrue(type(result) is six.text_type) for key, value in six.iteritems(headers): self.assertTrue(type(key) is six.text_type) self.assertTrue(type(value) is not six.binary_type) def testUTF8Japanese(self): fh = six.BytesIO(six.b("""OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:UTF-8 CHARSET:CSUNICODE COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE """)) ofx_file = OfxFile(fh) headers = ofx_file.headers result = ofx_file.fh.read() self.assertTrue(type(result) is six.text_type) for key, value in six.iteritems(headers): self.assertTrue(type(key) is six.text_type) self.assertTrue(type(value) is not six.binary_type) def testBrokenLineEndings(self): fh = six.BytesIO(six.b("OFXHEADER:100\rDATA:OFXSGML\r")) ofx_file = OfxFile(fh) self.assertEquals(len(ofx_file.headers.keys()), 2) class TestParse(TestCase): def testEmptyFile(self): fh = six.BytesIO(six.b("")) self.assertRaises(OfxParserException, OfxParser.parse, fh) def testThatParseWorksWithoutErrors(self): OfxParser.parse(open_file('bank_medium.ofx')) def testThatParseFailsIfNothingToParse(self): self.assertRaises(TypeError, OfxParser.parse, None) def testThatParseFailsIfAPathIsPassedIn(self): # A file handle should be passed in, not the path. self.assertRaises(RuntimeError, OfxParser.parse, '/foo/bar') def testThatParseReturnsAResultWithABankAccount(self): ofx = OfxParser.parse(open_file('bank_medium.ofx')) self.assertTrue(ofx.account is not None) def testEverything(self): ofx = OfxParser.parse(open_file('bank_medium.ofx')) self.assertEquals('12300 000012345678', ofx.account.number) self.assertEquals('160000100', ofx.account.routing_number) self.assertEquals('00', ofx.account.branch_id) self.assertEquals('CHECKING', ofx.account.account_type) self.assertEquals(Decimal('382.34'), ofx.account.statement.balance) # Todo: support values in decimal or int form. # self.assertEquals('15', # ofx.bank_account.statement.balance_in_pennies) self.assertEquals( Decimal('682.34'), ofx.account.statement.available_balance) self.assertEquals( datetime(2009, 4, 1), ofx.account.statement.start_date) self.assertEquals( datetime(2009, 5, 23, 12, 20, 17), ofx.account.statement.end_date) self.assertEquals(3, len(ofx.account.statement.transactions)) transaction = ofx.account.statement.transactions[0] self.assertEquals("MCDONALD'S #112", transaction.payee) self.assertEquals('pos', transaction.type) self.assertEquals(Decimal('-6.60'), transaction.amount) # Todo: support values in decimal or int form. # self.assertEquals('15', transaction.amount_in_pennies) def testMultipleAccounts(self): ofx = OfxParser.parse(open_file('multiple_accounts2.ofx')) self.assertEquals(2, len(ofx.accounts)) self.assertEquals('9100', ofx.accounts[0].number) self.assertEquals('9200', ofx.accounts[1].number) self.assertEquals('123', ofx.accounts[0].routing_number) self.assertEquals('123', ofx.accounts[1].routing_number) self.assertEquals('CHECKING', ofx.accounts[0].account_type) self.assertEquals('SAVINGS', ofx.accounts[1].account_type) class TestStringToDate(TestCase): ''' Test the string to date parser ''' def test_bad_format(self): ''' A poorly formatted string should throw a ValueError ''' bad_string = 'abcdLOL!' self.assertRaises(ValueError, OfxParser.parseOfxDateTime, bad_string) bad_but_close_string = '881103' self.assertRaises(ValueError, OfxParser.parseOfxDateTime, bad_string) no_month_string = '19881301' self.assertRaises(ValueError, OfxParser.parseOfxDateTime, bad_string) def test_parses_correct_time(self): '''Test whether it can parse correct time for some valid time fields''' self.assertEquals(OfxParser.parseOfxDateTime('19881201'), datetime(1988, 12, 1, 0, 0)) self.assertEquals(OfxParser.parseOfxDateTime('19881201230100'), datetime(1988, 12, 1, 23, 1)) self.assertEquals(OfxParser.parseOfxDateTime('20120229230100'), datetime(2012, 2, 29, 23, 1)) def test_parses_time_offset(self): ''' Test that we handle GMT offset ''' self.assertEquals(OfxParser.parseOfxDateTime('20001201120000 [0:GMT]'), datetime(2000, 12, 1, 12, 0)) self.assertEquals(OfxParser.parseOfxDateTime('19991201120000 [1:ITT]'), datetime(1999, 12, 1, 11, 0)) self.assertEquals( OfxParser.parseOfxDateTime('19881201230100 [-5:EST]'), datetime(1988, 12, 2, 4, 1)) self.assertEquals( OfxParser.parseOfxDateTime('20120229230100 [-6:CAT]'), datetime(2012, 3, 1, 5, 1)) self.assertEquals( OfxParser.parseOfxDateTime('20120412120000 [-5.5:XXX]'), datetime(2012, 4, 12, 17, 30)) self.assertEquals( OfxParser.parseOfxDateTime('20120412120000 [-5:XXX]'), datetime(2012, 4, 12, 17)) self.assertEquals( OfxParser.parseOfxDateTime('20120922230000 [+9:JST]'), datetime(2012, 9, 22, 14, 0)) class TestParseStmtrs(TestCase): input = ''' CAD16000010012300 000012345678CHECKING 2009040120090523122017 POS20090401122017.000[-5:EST]-6.600000123456782009040100001MCDONALD'S #112POS MERCHANDISE;MCDONALD'S #112 382.3420090523122017682.3420090523122017 ''' def testThatParseStmtrsReturnsAnAccount(self): stmtrs = soup_maker(self.input) account = OfxParser.parseStmtrs( stmtrs.find('stmtrs'), AccountType.Bank)[0] self.assertEquals('12300 000012345678', account.number) self.assertEquals('160000100', account.routing_number) self.assertEquals('CHECKING', account.account_type) def testThatReturnedAccountAlsoHasAStatement(self): stmtrs = soup_maker(self.input) account = OfxParser.parseStmtrs( stmtrs.find('stmtrs'), AccountType.Bank)[0] self.assertTrue(hasattr(account, 'statement')) class TestAccount(TestCase): def testThatANewAccountIsValid(self): account = Account() self.assertEquals('', account.number) self.assertEquals('', account.routing_number) self.assertEquals('', account.account_type) self.assertEquals(None, account.statement) class TestParseStatement(TestCase): def testThatParseStatementReturnsAStatement(self): input = ''' 20090523122017 0 INFO OK CAD 160000100 12300 000012345678 CHECKING 20090401 20090523122017 POS 20090401122017.000[-5:EST] -6.60 0000123456782009040100001 MCDONALD'S #112 POS MERCHANDISE;MCDONALD'S #112 382.34 20090523122017 682.34 20090523122017 ''' txn = soup_maker(input) statement = OfxParser.parseStatement(txn.find('stmttrnrs')) self.assertEquals(datetime(2009, 4, 1), statement.start_date) self.assertEquals( datetime(2009, 5, 23, 12, 20, 17), statement.end_date) self.assertEquals(1, len(statement.transactions)) self.assertEquals(Decimal('382.34'), statement.balance) self.assertEquals(Decimal('682.34'), statement.available_balance) class TestStatement(TestCase): def testThatANewStatementIsValid(self): statement = Statement() self.assertEquals('', statement.start_date) self.assertEquals('', statement.end_date) self.assertEquals(0, len(statement.transactions)) class TestParseTransaction(TestCase): def testThatParseTransactionReturnsATransaction(self): input = ''' POS 20090401122017.000[-5:EST] -6.60 0000123456782009040100001 MCDONALD'S #112 POS MERCHANDISE;MCDONALD'S #112 ''' txn = soup_maker(input) transaction = OfxParser.parseTransaction(txn.find('stmttrn')) self.assertEquals('pos', transaction.type) self.assertEquals(datetime( 2009, 4, 1, 12, 20, 17) - timedelta(hours=-5), transaction.date) self.assertEquals(Decimal('-6.60'), transaction.amount) self.assertEquals('0000123456782009040100001', transaction.id) self.assertEquals("MCDONALD'S #112", transaction.payee) self.assertEquals("POS MERCHANDISE;MCDONALD'S #112", transaction.memo) def testThatParseTransactionWithFieldCheckNum(self): input = ''' DEP 20130306 1000.00 2013030601009100 700 DEPOSITO ONLINE ''' txn = soup_maker(input) transaction = OfxParser.parseTransaction(txn.find('stmttrn')) self.assertEquals('700', transaction.checknum) class TestTransaction(TestCase): def testThatAnEmptyTransactionIsValid(self): t = Transaction() self.assertEquals('', t.payee) self.assertEquals('', t.type) self.assertEquals(None, t.date) self.assertEquals(None, t.amount) self.assertEquals('', t.id) self.assertEquals('', t.memo) self.assertEquals('', t.checknum) class TestInvestmentAccount(TestCase): sample = ''' 38737714201101012011062420110624 0 INFO ''' def testThatParseCanCreateAnInvestmentAccount(self): OfxParser.parse(six.BytesIO(six.b(self.sample))) # Success! class TestVanguardInvestmentStatement(TestCase): def testForUnclosedTags(self): ofx = OfxParser.parse(open_file('vanguard.ofx')) self.assertTrue(hasattr(ofx, 'account')) self.assertTrue(hasattr(ofx.account, 'statement')) self.assertTrue(hasattr(ofx.account.statement, 'transactions')) self.assertEquals(len(ofx.account.statement.transactions), 1) self.assertEquals(ofx.account.statement.transactions[0].id, '01234567890.0123.07152011.0') self.assertEquals(ofx.account.statement.transactions[0] .tradeDate, datetime(2011, 7, 15, 21)) self.assertEquals(ofx.account.statement.transactions[0] .settleDate, datetime(2011, 7, 15, 21)) self.assertTrue(hasattr(ofx.account.statement, 'positions')) self.assertEquals(len(ofx.account.statement.positions), 2) self.assertEquals( ofx.account.statement.positions[0].units, Decimal('102.0')) def testSecurityListSuccess(self): ofx = OfxParser.parse(open_file('vanguard.ofx')) self.assertEquals(len(ofx.security_list), 2) class TestFidelityInvestmentStatement(TestCase): def testForUnclosedTags(self): ofx = OfxParser.parse(open_file('fidelity.ofx')) self.assertTrue(hasattr(ofx.account.statement, 'positions')) self.assertEquals(len(ofx.account.statement.positions), 6) self.assertEquals( ofx.account.statement.positions[0].units, Decimal('128.0')) def testSecurityListSuccess(self): ofx = OfxParser.parse(open_file('fidelity.ofx')) self.assertEquals(len(ofx.security_list), 7) class TestAccountInfoAggregation(TestCase): def testForFourAccounts(self): ofx = OfxParser.parse(open_file('account_listing_aggregation.ofx')) self.assertTrue(hasattr(ofx, 'accounts')) self.assertEquals(len(ofx.accounts), 4) # first account account = ofx.accounts[0] self.assertEquals(account.account_type, 'SAVINGS') self.assertEquals(account.desc, 'USAA SAVINGS') self.assertEquals(account.institution.organization, 'USAA') self.assertEquals(account.number, '0000000001') self.assertEquals(account.routing_number, '314074269') # second account = ofx.accounts[1] self.assertEquals(account.account_type, 'CHECKING') self.assertEquals(account.desc, 'FOUR STAR CHECKING') self.assertEquals(account.institution.organization, 'USAA') self.assertEquals(account.number, '0000000002') self.assertEquals(account.routing_number, '314074269') # third account = ofx.accounts[2] self.assertEquals(account.account_type, 'CREDITLINE') self.assertEquals(account.desc, 'LINE OF CREDIT') self.assertEquals(account.institution.organization, 'USAA') self.assertEquals(account.number, '00000000000003') self.assertEquals(account.routing_number, '314074269') # fourth account = ofx.accounts[3] self.assertEquals(account.account_type, '') self.assertEquals(account.desc, 'MY CREDIT CARD') self.assertEquals(account.institution.organization, 'USAA') self.assertEquals(account.number, '4111111111111111') class TestGracefulFailures(TestCase): ''' Test that when fail_fast is False, failures are returned to the caller as warnings and discarded entries in the Statement class. ''' def testDateFieldMissing(self): ''' The test file contains three transactions in a single statement. They fail due to: 1) No date 2) Empty date 3) Invalid date ''' ofx = OfxParser.parse(open_file('fail_nice/date_missing.ofx'), False) self.assertEquals(len(ofx.account.statement.transactions), 0) self.assertEquals(len(ofx.account.statement.discarded_entries), 3) self.assertEquals(len(ofx.account.statement.warnings), 0) # Test that it raises an error otherwise. self.assertRaises(OfxParserException, OfxParser.parse, open_file('fail_nice/date_missing.ofx')) def testDecimalConversionError(self): ''' The test file contains a transaction that has a poorly formatted decimal number ($20). Test that we catch this. ''' ofx = OfxParser.parse(open_file('fail_nice/decimal_error.ofx'), False) self.assertEquals(len(ofx.account.statement.transactions), 0) self.assertEquals(len(ofx.account.statement.discarded_entries), 1) # Test that it raises an error otherwise. self.assertRaises(OfxParserException, OfxParser.parse, open_file('fail_nice/decimal_error.ofx')) def testEmptyBalance(self): ''' The test file contains empty or blank strings in the balance fields. Fail nicely on those. ''' ofx = OfxParser.parse(open_file('fail_nice/empty_balance.ofx'), False) self.assertEquals(len(ofx.account.statement.transactions), 1) self.assertEquals(len(ofx.account.statement.discarded_entries), 0) self.assertFalse(hasattr(ofx.account.statement, 'balance')) self.assertFalse(hasattr(ofx.account.statement, 'available_balance')) # Test that it raises an error otherwise. self.assertRaises(OfxParserException, OfxParser.parse, open_file('fail_nice/empty_balance.ofx')) class TestParseSonrs(TestCase): def testSuccess(self): ofx = OfxParser.parse(open_file('signon_success.ofx'), True) self.assertTrue(ofx.signon.success) self.assertEquals(ofx.signon.code, 0) self.assertEquals(ofx.signon.severity, 'INFO') self.assertEquals(ofx.signon.message, 'Login successful') ofx = OfxParser.parse(open_file('signon_success_no_message.ofx'), True) self.assertTrue(ofx.signon.success) self.assertEquals(ofx.signon.code, 0) self.assertEquals(ofx.signon.severity, 'INFO') self.assertEquals(ofx.signon.message, '') def testFailure(self): ofx = OfxParser.parse(open_file('signon_fail.ofx'), True) self.assertFalse(ofx.signon.success) self.assertEquals(ofx.signon.code, 15500) self.assertEquals(ofx.signon.severity, 'ERROR') self.assertEquals(ofx.signon.message, 'Your request could not be processed because you supplied an invalid identification code or your password was incorrect') if __name__ == "__main__": import unittest unittest.main() ofxparse-0.14/tests/fixtures/0000775000175000017500000000000012210373440020032 5ustar jseutterjseutter00000000000000ofxparse-0.14/tests/fixtures/signon_fail.ofx0000664000175000017500000000077612140626070023054 0ustar jseutterjseutter00000000000000OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:0e1a88e56fc548a1ba2e83bce6323bb6 15500ERRORYour request could not be processed because you supplied an invalid identification code or your password was incorrect20130325211209.350[-7:MST]ENGAMEX31012013032521120915500 ofxparse-0.14/tests/fixtures/signon_success_no_message.ofx0000664000175000017500000000057212140626070026003 0ustar jseutterjseutter00000000000000OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:3bb6707632b64da196722ef312e6376d 0INFO20130325211405.187[-7:MST]ENGAMEX310120130325211405FMPWeb ofxparse-0.14/tests/fixtures/multiple_accounts2.ofx0000664000175000017500000000306612116146620024374 0ustar jseutterjseutter00000000000000 0 INFO The operation succeeded. 20120603203135.547[-7:PDT] ENG blah 1000 1001 0 INFO USD 123 00 9100 CHECKING 111 20120603133220.000[-7:PDT] 1002 0 INFO USD 123 00 9200 SAVINGS 222 20120603133220.000[-7:PDT] ofxparse-0.14/tests/fixtures/fidelity.ofx0000664000175000017500000003431412032735501022370 0ustar jseutterjseutter00000000000000OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 0INFOSUCCESS20120908190849.317[-4:EDT]ENGfidelity.com7776a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a00INFOSUCCESS20120908033034.000[-4:EDT]USDfidelity.com0123456789020120710000000.000[-4:EDT]20120908190849.555[-4:EDT]012345678902020112012072020120720000000.000[-4:EDT]YOU BOUGHT458140100CUSIP+0000000000100.00000000000025.635000000+00000000000007.9500+00000000000000.0000-00000000002571.45001.00USDCASHCASHBUY 012345678902090112012072720120727000000.000[-4:EDT]YOU BOUGHTG7945E105CUSIP+0000000000128.00000000000039.390900000+00000000000007.9500+00000000000000.0000-00000000005049.99001.00USDCASHCASHBUY 012345678902090122012072720120727000000.000[-4:EDT]YOU BOUGHT431571108CUSIP+0000000000115.00000000000017.250000000+00000000000007.9500+00000000000000.0000-00000000001991.70001.00USDCASHCASHBUY 012345678902130112012073120120731000000.000[-4:EDT]YOU BOUGHT19421R200CUSIP+0000000000069.00000000000014.469900000+00000000000007.9500+00000000000000.0000-00000000001006.37001.00USDCASHCASHBUY 012345678902130162012073120120731000000.000[-4:EDT]YOU BOUGHT98417P105CUSIP+0000000000386.00000000000002.588700000+00000000000007.9500+00000000000000.0000-00000000001007.19001.00USDCASHCASHBUY 012345678902350122012082020120820000000.000[-4:EDT]REINVESTMENT98417P105CUSIP+0000000000004.90900000000002.947400000+00000000000000.0000+00000000000000.0000-00000000000014.47001.00USDCASHCASHBUY 012345678902440112012083120120831000000.000[-4:EDT]REINVESTMENT19421R200CUSIP+0000000000001.57300000000014.257000000+00000000000000.0000+00000000000000.0000-00000000000022.43001.00USDCASHCASHBUY 012345678902480112012090120120901000000.000[-4:EDT]REINVESTMENT458140100CUSIP+0000000000000.91100000000024.705500000+00000000000000.0000+00000000000000.0000-00000000000022.50001.00USDCASHCASHBUY 012345678902130152012073120120731000000.000[-4:EDT]DIVIDEND RECEIVED78462F103CUSIPDIV+00000000000005.5300CASHCASH1.00USD 012345678902350132012082020120820000000.000[-4:EDT]DIVIDEND RECEIVED98417P105CUSIPDIV+00000000000015.4400CASHCASH1.00USD 012345678902440122012083120120831000000.000[-4:EDT]DIVIDEND RECEIVED19421R200CUSIPDIV+00000000000022.4300CASHCASH1.00USD 012345678902480122012090120120901000000.000[-4:EDT]DIVIDEND RECEIVED458140100CUSIPDIV+00000000000022.5000CASHCASH1.00USD 012345678902090132012072720120727000000.000[-4:EDT]YOU SOLD78462F103CUSIP-0000000000008.00000000000137.160000000+00000000000007.9500+00000000000000.0000+00000000001089.30001.00USDCASHCASHSELL 012345678902140142012080120120801000000.000[-4:EDT]IN LIEU OF FRX SHARE78462F103CUSIP-0000000000000.03500000000137.142857143+00000000000000.0000+00000000000000.0000+00000000000004.80001.00USDCASHCASHSELL DEP20120731000000.000[-4:EDT]+00000000000000.24000123456789021301320120731INTEREST EARNEDINTEREST EARNED1.00USD CASH OTHER20120820000000.000[-4:EDT]-00000000000000.97000123456789023501120120820LATE SETTLEMENT FEELATE SETTLEMENT FEE1.00USD CASH DEP20120831000000.000[-4:EDT]+00000000000000.16000123456789024401420120831INTEREST EARNEDINTEREST EARNED1.00USD CASH G7945E105CUSIPCASHLONG128.0000040.8700000+00000005231.3620120908033034.000[-4:EDT]1.0USD19421R200CUSIPCASHLONG70.5730014.3200000+00000001010.6020120908033034.000[-4:EDT]1.0USD431571108CUSIPCASHLONG115.0000018.9300000+00000002176.9520120908033034.000[-4:EDT]1.0USD458140100CUSIPCASHLONG100.9110024.1900000+00000002441.0320120908033034.000[-4:EDT]1.0USD756577102CUSIPCASHLONG50.0000059.1500000+00000002957.5020120908033034.000[-4:EDT]1.0USD98417P105CUSIPCASHLONG390.909002.8200000+00000001102.3620120908033034.000[-4:EDT]1.0USD18073.98+00000000000.00+00000000000.00+00000000000.00NetworthThe net market value of all long and short positions in the accountDOLLAR32993.7920120908033034.000[-4:EDT]1.000USDMargin EquityThe margin market value less any margin debit balanceDOLLAR0.020120908033034.000[-4:EDT]1.000USDMargin Equity PercentageMargin equity / market value of long and short positionsPERCENT0.020120908033034.000[-4:EDT]1.000USDCash Debit BalanceCash Debit BalanceDOLLAR0.020120908033034.000[-4:EDT]1.000USDTotal Money MarketsThe total value of all money market positions in the cash accountDOLLAR18073.9820120908033034.000[-4:EDT]1.000USDHouse SurplusEquity amount above house requirementsDOLLAR0.020120908033034.000[-4:EDT]1.000USDNYSE SurplusEquity amount above exchange requirementsDOLLAR0.020120908033034.000[-4:EDT]1.000USDFederal SurplusAmount above federal requirementsDOLLAR0.020120908033034.000[-4:EDT]1.000USDBuying Power - EquitiesAmount of equities you can buy on margin without generating a margin callDOLLAR0.020120908033034.000[-4:EDT]1.000USDBuying Power - Municipal BondsAmount of municipal bonds you can buy on margin without generating a margin callDOLLAR0.020120908033034.000[-4:EDT]1.000USDBuying Power - Government BondsAmount of government bonds you can buy on margin without generating a margin calDOLLAR0.020120908033034.000[-4:EDT]1.000USDBuying Power - Corporate BondsAmount you can buy of corporate bonds on margin with no margin callDOLLAR0.020120908033034.000[-4:EDT]1.000USDOption Market ValueThe market value of all options in the accountDOLLAR0.020120908033034.000[-4:EDT]1.000USDOption In The Money AmountThe in-the-money amount on covered optionsDOLLAR0.020120908033034.000[-4:EDT]1.000USDCash Market valueTotal value of all cash account positionsDOLLAR14919.820120908033034.000[-4:EDT]1.000USDMargin Market ValueTotal value of positions in margin less in-the-money amount of covered optionsDOLLAR0.020120908033034.000[-4:EDT]1.000USDShort Market ValueTotal value of short positions less in-the-money amount of covered put optionsDOLLAR0.020120908033034.000[-4:EDT]1.000USDAvailable to BorrowCash amount that can be borrowed without generating a margin callDOLLAR0.020120908033034.000[-4:EDT]1.000USDG7945E105CUSIPSEADRILL LTD USD2SDRL20120908033034.000[-4:EDT]1.000USD COMMON20120908033034.000[-4:EDT]19421R200CUSIPCOLLECTORS UNIVERSE INCCLCT20120908033034.000[-4:EDT]1.000USD COMMON20120908033034.000[-4:EDT]431571108CUSIPHILLENBRAND INC COMHI20120908033034.000[-4:EDT]1.000USD COMMON20120908033034.000[-4:EDT]458140100CUSIPINTEL CORPINTC20120908033034.000[-4:EDT]1.000USD COMMON20120908033034.000[-4:EDT]756577102CUSIPRED HAT INCRHT20120908033034.000[-4:EDT]1.000USD COMMON20120908033034.000[-4:EDT]98417P105CUSIPXINYUAN REAL ESTATE ADR EACH REPR 2 ORD SHSXIN20120908033034.000[-4:EDT]1.000USD COMMON20120908033034.000[-4:EDT]78462F103CUSIPSPDR S&P 500 ETF TRUST UNIT SER 1 S&PSPY20120908033034.000[-4:EDT]1.000USD COMMON20120908033034.000[-4:EDT] ofxparse-0.14/tests/fixtures/fail_nice/0000775000175000017500000000000012210373440021743 5ustar jseutterjseutter00000000000000ofxparse-0.14/tests/fixtures/fail_nice/decimal_error.ofx0000664000175000017500000000256211751467417025316 0ustar jseutterjseutter00000000000000 0 INFO 20110614 1 0 INFO CAD 123845030 192639749 CHECKING 20110412 20110614 OTHER 201120000000 $120 2000957249 Fail1 0 20110614 ofxparse-0.14/tests/fixtures/fail_nice/empty_balance.ofx0000664000175000017500000000263412116147424025277 0ustar jseutterjseutter00000000000000 0 INFO 20110614 1 0 INFO CAD 123845030 192639749 CHECKING 20110412 20110614 OTHER 20110308020000 120 2000957249 Foobar 20110614 20110614 ofxparse-0.14/tests/fixtures/fail_nice/date_missing.ofx0000664000175000017500000000360711751467417025156 0ustar jseutterjseutter00000000000000 0 INFO 20110614 1 0 INFO USD 123845030 192639749 CHECKING 20110412 20110614 OTHER -80.00 184997056 TestFail1 OTHER 200.00 2000957249 TestFail2 OTHER 20120231 200.00 2000957249 TestFail2 0 20110614 ofxparse-0.14/tests/fixtures/signon_success.ofx0000664000175000017500000000062312140626070023600 0ustar jseutterjseutter00000000000000OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:3bb6707632b64da196722ef312e6376d 0INFOLogin successful20130325211405.187[-7:MST]ENGAMEX310120130325211405FMPWeb ofxparse-0.14/tests/fixtures/checking.ofx0000664000175000017500000000333612175537210022337 0ustar jseutterjseutter00000000000000OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE 0 INFO 20130525225731.258 ENG 20050531060000.000 FAKE 1101 51123 9774652 0 0 INFO USD 5472369148 1452687~7 CHECKING 20000101070000.000 20130525060000.000 CREDIT 20110331120000.000 0.01 0000486 DIVIDEND EARNED FOR PERIOD OF 03 DIVIDEND EARNED FOR PERIOD OF 03/01/2011 THROUGH 03/31/2011 ANNUAL PERCENTAGE YIELD EARNED IS 0.05% DEBIT 20110405120000.000 -34.51 0000487 AUTOMATIC WITHDRAWAL, ELECTRIC BILL AUTOMATIC WITHDRAWAL, ELECTRIC BILL WEB(S ) CHECK 20110407120000.000 -25.00 0000488 319 RETURNED CHECK FEE, CHECK # 319 RETURNED CHECK FEE, CHECK # 319 FOR $45.33 ON 04/07/11 100.99 20130525225731.258 75.99 20130525225731.258 ofxparse-0.14/tests/fixtures/bank_small.ofx0000644000175000017500000000022111616130230022641 0ustar jseutterjseutter00000000000000OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE ofxparse-0.14/tests/fixtures/vanguard.ofx0000664000175000017500000000412511706440370022367 0ustar jseutterjseutter00000000000000OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 0INFOSuccessful Sign On20110727001702[-5:EST]ENG20010918083000The Vanguard Groupa0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a00INFO420110727USDvanguard.com0123456789020110625160000.000[-5:EST]20110727160000.000[-5:EST]01234567890.0123.07152011.020110715160000.000[-5:EST]20110715160000.000[-5:EST]THIS IS A MEMO012345678CUSIP-42.123100.004212.3CASHOTHERSELL012345678CUSIPOTHERLONG102.0100.0010200.020110726160000.000[-5:EST]Price as of date based on closing priceYY012345678CUSIPOTHERLONG142.2100.4214279.7220110726160000.000[-5:EST]Price as of date based on closing priceYY012345678CUSIPName of the securityVFINX012254.0Price as of date based on closing priceOPENEND012345678CUSIPName of shareVFIAX0123123.45Price as of date based on closing priceOPENENDofxparse-0.14/tests/fixtures/bank_medium.ofx0000644000175000017500000000246212140632350023025 0ustar jseutterjseutter00000000000000OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE 0INFOOK20090523122017ENG200905231220172009052312201700024 200905231220170INFOOK CAD1600001000012300 000012345678CHECKING 2009040120090523122017 POS20090401122017.000[-5:EST]-6.600000123456782009040100001MCDONALD'S #112POS MERCHANDISE;MCDONALD'S #112 CHECK20090402122017.000[-5:EST]-316.6700001234567820090402000040Joe's Bald HairstylesMISCELLANEOUS PAYMENTS;Joe's Bald Hairstyles POS20090403122017.000[-5:EST]-22.000000123456782009040300005CONNIE'S HAIR DPOS MERCHANDISE;CONNIE'S HAIR D 382.3420090523122017682.3420090523122017 ofxparse-0.14/tests/fixtures/investment_medium.ofx0000644000175000017500000000570311616130230024304 0ustar jseutterjseutter00000000000000OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE 0 INFO 20091217162416.000[-:EST] ENG REDACTEDINC-US 1234 0 0 INFO 20091215202000.000[-4:EST] CAD 404 ABC123 20091214202000.000[-5:EST] 20091215202000.000[-5:EST] DEBIT 20091215202000.000[-4:EST] -3.65 20091215.U489357.e.USD.1510480481 CASH TRADE: AUD.USD 1.06 USD CASH CREDIT 20091215202000.000[-4:EST] 3.35 20091215.U489357.e.USD.1510982018 CASH TRADE: AUD.USD 1.06 USD CASH DEBIT 20091215202000.000[-4:EST] -3.65 20091215.U489357.e.USD.1511863617 CASH TRADE: AUD.USD 1.06 USD CASH 1.00 0 0 ENDING CASH ENDING CASH BALANCE NUMBER 2.00 STOCK VALUE TOTAL EQUITY IN STOCKS NUMBER 0.00 OPTION VALUE TOTAL EQUITY IN OPTIONS NUMBER 0.00 IBGROUPNOTES VALUE TOTAL EQUITY IN IBGROUPNOTES NUMBER 0.00 ofxparse-0.14/tests/fixtures/multiple_accounts.ofx0000664000175000017500000000306612116146620024312 0ustar jseutterjseutter00000000000000 0 INFO The operation succeeded. 20120603203135.547[-7:PDT] ENG blah 1000 1001 0 INFO USD 123 00 9100 CHECKING 111 20120603133220.000[-7:PDT] 1002 0 INFO USD 123 00 9200 SAVINGS 222 20120603133220.000[-7:PDT] ofxparse-0.14/tests/fixtures/account_listing_aggregation.ofx0000664000175000017500000000261412014576235026320 0ustar jseutterjseutter00000000000000OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:85230611d6fc414fa391a8c2425f8e9e 0INFOSuccess 20120814060142ENG USAA24591 09ca62d0198049388252f0a547bae86a 0INFOSuccess 4 20120814120000 USAA SAVINGS 3140742690000000001SAVINGS YNNACTIVE FOUR STAR CHECKING 3140742690000000002CHECKING YNNACTIVE LINE OF CREDIT 31407426900000000000003CREDITLINE YNNACTIVE MY CREDIT CARD 4111111111111111 YNNACTIVE ofxparse-0.14/tests/support.py0000664000175000017500000000034112176230107020250 0ustar jseutterjseutter00000000000000import os def open_file(filename): ''' Load a file from the fixtures directory. ''' path = 'fixtures/' + filename if ('tests' in os.listdir('.')): path = 'tests/' + path return open(path, mode='rb') ofxparse-0.14/LICENSE0000644000175000017500000000204111616130230016014 0ustar jseutterjseutter00000000000000Copyright (c) 2009 Jerry Seutter Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ofxparse-0.14/MANIFEST.in0000664000175000017500000000007312210372707016562 0ustar jseutterjseutter00000000000000include LICENSE AUTHORS recursive-include tests *.py *.ofx ofxparse-0.14/README0000664000175000017500000000462312210372662015711 0ustar jseutterjseutter00000000000000ofxparse ======== ofxparse is a parser for Open Financial Exchange (.ofx) format files. OFX files are available from almost any online banking site, so they work well if you want to pull together your finances from multiple sources. Online trading accounts also provide account statements in OFX files. There are three different types of OFX files, called BankAccount, CreditAccount and InvestmentAccount files. This library has been tested with real-world samples of all three types. If you find a file that does not work with this library, please consider contributing the file so ofxparse can be improved. See the Help! section below for directions on how to do this. Example Usage ============= Here's a sample program:: from ofxparse import OfxParser ofx = OfxParser.parse(file('file.ofx')) ofx.accounts # An account with information ofx.account.number # The account number ofx.account.routing_number # The transit id (sometimes called branch number) ofx.account.statement # Account information for a period of time ofx.account.statement.start_date # The start date of the transactions ofx.account.statement.end_date # The end date of the transactions ofx.account.statement.transactions # A list of account activities ofx.account.statement.balance # The money in the account as of the statement date ofx.account.statement.available_balance # The money available from the account as of the statement date Help! ===== Sample .ofx files are very useful. If you want to help us out, please edit all identifying information from the file and then email it to jseutter dot ofxparse at gmail dot com. Development =========== Prerequisites:: (Ubuntu) sudo apt-get install python-beautifulsoup python-nose python-coverage-test-runner (pip) pip install BeautifulSoup nose coverage Tests:: Simply running the "nose" command should run the tests. If you don't have nose installed, the following might also work: python -m unittest tests.test_parse Test Coverage Report:: coverage run -m unittest tests.test_parse coverage html firefox htmlcov/index.html Homepage ======== http://sites.google.com/site/ofxparse License ======= ofxparse is released under an MIT license. See the LICENSE file for the actual license text. The basic idea is that if you can use Python to do what you are doing, you can also use this library. ofxparse-0.14/setup.py0000664000175000017500000000371612207754216016552 0ustar jseutterjseutter00000000000000import re import sys from setuptools import setup, find_packages # Read the version from __init__ to avoid importing ofxparse while installing. # This lets the install work when the user does not have BeautifulSoup # installed. VERSION = re.search(r"__version__ = '(.*?)'", open("ofxparse/__init__.py").read()).group(1) # Use BeautifulSoup 3 on Python 2.5 and earlier and BeautifulSoup 4 otherwise if sys.version_info < (2,6): REQUIRES = [ "beautifulSoup>=3.0", ] else: REQUIRES = [ "beautifulsoup4" ] if sys.version_info < (2,7): REQUIRES.extend([ "ordereddict>=1.1", ]) REQUIRES.extend([ 'six', ]) setup_params = dict( name='ofxparse', version=VERSION, description=("Tools for working with the OFX (Open Financial Exchange)" " file format"), long_description=open("./README", "r").read(), # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2.5", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities", "License :: OSI Approved :: MIT License", ], keywords='ofx, Open Financial Exchange, file formats', author='Jerry Seutter', author_email='jseutter.ofxparse@gmail.com', url='http://sites.google.com/site/ofxparse', license='MIT License', packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), include_package_data=True, zip_safe=True, install_requires=REQUIRES, entry_points=""" """, test_suite='tests', ) if __name__ == '__main__': setup(**setup_params) ofxparse-0.14/ofxparse.egg-info/0000775000175000017500000000000012210373440020340 5ustar jseutterjseutter00000000000000ofxparse-0.14/ofxparse.egg-info/SOURCES.txt0000644000175000017500000000171112210373440022222 0ustar jseutterjseutter00000000000000AUTHORS LICENSE MANIFEST.in README setup.cfg setup.py ofxparse/__init__.py ofxparse/mcc.py ofxparse/ofxparse.py ofxparse/ofxutil.py ofxparse.egg-info/PKG-INFO ofxparse.egg-info/SOURCES.txt ofxparse.egg-info/dependency_links.txt ofxparse.egg-info/entry_points.txt ofxparse.egg-info/requires.txt ofxparse.egg-info/top_level.txt ofxparse.egg-info/zip-safe tests/__init__.py tests/support.py tests/test_parse.py tests/test_write.py tests/fixtures/account_listing_aggregation.ofx tests/fixtures/bank_medium.ofx tests/fixtures/bank_small.ofx tests/fixtures/checking.ofx tests/fixtures/fidelity.ofx tests/fixtures/investment_medium.ofx tests/fixtures/multiple_accounts.ofx tests/fixtures/multiple_accounts2.ofx tests/fixtures/signon_fail.ofx tests/fixtures/signon_success.ofx tests/fixtures/signon_success_no_message.ofx tests/fixtures/vanguard.ofx tests/fixtures/fail_nice/date_missing.ofx tests/fixtures/fail_nice/decimal_error.ofx tests/fixtures/fail_nice/empty_balance.ofxofxparse-0.14/ofxparse.egg-info/PKG-INFO0000644000175000017500000000746412210373440021446 0ustar jseutterjseutter00000000000000Metadata-Version: 1.1 Name: ofxparse Version: 0.14 Summary: Tools for working with the OFX (Open Financial Exchange) file format Home-page: http://sites.google.com/site/ofxparse Author: Jerry Seutter Author-email: jseutter.ofxparse@gmail.com License: MIT License Description: ofxparse ======== ofxparse is a parser for Open Financial Exchange (.ofx) format files. OFX files are available from almost any online banking site, so they work well if you want to pull together your finances from multiple sources. Online trading accounts also provide account statements in OFX files. There are three different types of OFX files, called BankAccount, CreditAccount and InvestmentAccount files. This library has been tested with real-world samples of all three types. If you find a file that does not work with this library, please consider contributing the file so ofxparse can be improved. See the Help! section below for directions on how to do this. Example Usage ============= Here's a sample program:: from ofxparse import OfxParser ofx = OfxParser.parse(file('file.ofx')) ofx.accounts # An account with information ofx.account.number # The account number ofx.account.routing_number # The transit id (sometimes called branch number) ofx.account.statement # Account information for a period of time ofx.account.statement.start_date # The start date of the transactions ofx.account.statement.end_date # The end date of the transactions ofx.account.statement.transactions # A list of account activities ofx.account.statement.balance # The money in the account as of the statement date ofx.account.statement.available_balance # The money available from the account as of the statement date Help! ===== Sample .ofx files are very useful. If you want to help us out, please edit all identifying information from the file and then email it to jseutter dot ofxparse at gmail dot com. Development =========== Prerequisites:: (Ubuntu) sudo apt-get install python-beautifulsoup python-nose python-coverage-test-runner (pip) pip install BeautifulSoup nose coverage Tests:: Simply running the "nose" command should run the tests. If you don't have nose installed, the following might also work: python -m unittest tests.test_parse Test Coverage Report:: coverage run -m unittest tests.test_parse coverage html firefox htmlcov/index.html Homepage ======== http://sites.google.com/site/ofxparse License ======= ofxparse is released under an MIT license. See the LICENSE file for the actual license text. The basic idea is that if you can use Python to do what you are doing, you can also use this library. Keywords: ofx,Open Financial Exchange,file formats Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Developers Classifier: Natural Language :: English Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 2.5 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Utilities Classifier: License :: OSI Approved :: MIT License ofxparse-0.14/ofxparse.egg-info/top_level.txt0000644000175000017500000000001112210373440023060 0ustar jseutterjseutter00000000000000ofxparse ofxparse-0.14/ofxparse.egg-info/dependency_links.txt0000644000175000017500000000000112210373440024404 0ustar jseutterjseutter00000000000000 ofxparse-0.14/ofxparse.egg-info/zip-safe0000644000175000017500000000000111616134175021777 0ustar jseutterjseutter00000000000000 ofxparse-0.14/ofxparse.egg-info/entry_points.txt0000644000175000017500000000000512210373440023627 0ustar jseutterjseutter00000000000000 ofxparse-0.14/ofxparse.egg-info/requires.txt0000644000175000017500000000002212210373440022730 0ustar jseutterjseutter00000000000000beautifulsoup4 sixofxparse-0.14/ofxparse/0000775000175000017500000000000012210373440016646 5ustar jseutterjseutter00000000000000ofxparse-0.14/ofxparse/__init__.py0000664000175000017500000000021412210373123020752 0ustar jseutterjseutter00000000000000from __future__ import absolute_import from .ofxparse import OfxParser, AccountType, Account, Statement, Transaction __version__ = '0.14' ofxparse-0.14/ofxparse/ofxparse.py0000664000175000017500000007252412207754027021073 0ustar jseutterjseutter00000000000000from __future__ import absolute_import, with_statement import sys import decimal import datetime import codecs import re import collections import contextlib try: from StringIO import StringIO except ImportError: from io import StringIO import six if 'OrderedDict' in dir(collections): odict = collections else: import ordereddict as odict from . import mcc def soup_maker(fh): try: from bs4 import BeautifulSoup return BeautifulSoup(fh) except ImportError: from BeautifulSoup import BeautifulStoneSoup return BeautifulStoneSoup(fh) def try_decode(string, encoding): if hasattr(string, 'decode'): string = string.decode(encoding) return string def is_iterable(candidate): if sys.version_info < (2,6): return hasattr(candidate, 'next') return isinstance(candidate, collections.Iterable) @contextlib.contextmanager def save_pos(fh): """ Save the position of the file handle, seek to the beginning, and then restore the position. """ orig_pos = fh.tell() fh.seek(0) try: yield fh finally: fh.seek(orig_pos) class OfxFile(object): def __init__(self, fh): """ fh should be a seekable file-like byte stream object """ self.headers = odict.OrderedDict() self.fh = fh if not is_iterable(self.fh): return if not hasattr(self.fh, "seek"): return # fh is not a file object, we're doomed. with save_pos(self.fh): self.read_headers() self.handle_encoding() self.replace_NONE_headers() def read_headers(self): head_data = self.fh.read(1024 * 10) head_data = head_data[:head_data.find(six.b('<'))] for line in re.split(six.b('\r?\n?'), head_data): # Newline? if line.strip() == six.b(""): break header, value = line.split(six.b(":")) header, value = header.strip().upper(), value.strip() self.headers[header] = value def handle_encoding(self): """ Decode the headers and wrap self.fh in a decoder such that it subsequently returns only text. """ # decode the headers using ascii ascii_headers = odict.OrderedDict( ( key.decode('ascii', 'replace'), value.decode('ascii', 'replace'), ) for key, value in six.iteritems(self.headers) ) enc_type = ascii_headers.get('ENCODING') if not enc_type: # no encoding specified, use the ascii-decoded headers self.headers = ascii_headers # decode the body as ascii as well self.fh = codecs.lookup('ascii').streamreader(self.fh) return if enc_type == "USASCII": cp = ascii_headers.get("CHARSET", "1252") encoding = "cp%s" % (cp, ) elif enc_type in ("UNICODE", "UTF-8"): encoding = "utf-8" codec = codecs.lookup(encoding) self.fh = codec.streamreader(self.fh) # Decode the headers using the encoding self.headers = odict.OrderedDict( (key.decode(encoding), value.decode(encoding)) for key, value in six.iteritems(self.headers) ) def replace_NONE_headers(self): """ Any headers that indicate 'none' should be replaced with Python None values """ for header in self.headers: if self.headers[header].upper() == 'NONE': self.headers[header] = None class OfxPreprocessedFile(OfxFile): def __init__(self, fh): super(OfxPreprocessedFile,self).__init__(fh) if self.fh is None: return ofx_string = self.fh.read() # find all closing tags as hints closing_tags = [ t.upper() for t in re.findall(r'(?i)', ofx_string) ] # close all tags that don't have closing tags and # leave all other data intact last_open_tag = None tokens = re.split(r'(?i)()', ofx_string) new_fh = StringIO() for idx,token in enumerate(tokens): is_closing_tag = token.startswith('" % last_open_tag) last_open_tag = None if is_open_tag: tag_name = re.findall(r'(?i)<([a-z0-9_\.]+)>', token)[0] if tag_name.upper() not in closing_tags: last_open_tag = tag_name new_fh.write(token) new_fh.seek(0) self.fh = new_fh class Ofx(object): def __str__(self): return "" # headers = "\r\n".join(":".join(el if el else "NONE" for el in item) for item in six.iteritems(self.headers)) # headers += "\r\n\r\n" # # return headers + str(self.signon) class AccountType(object): (Unknown, Bank, CreditCard, Investment) = range(0, 4) class Account(object): def __init__(self): self.statement = None self.account_id = '' self.routing_number = '' self.branch_id = '' self.account_type = '' self.institution = None self.type = AccountType.Unknown # Used for error tracking self.warnings = [] @property def number(self): # For backwards compatibility. Remove in version 1.0. return self.account_id class InvestmentAccount(Account): def __init__(self): super(InvestmentAccount, self).__init__() self.brokerid = '' class Security: def __init__(self, uniqueid, name, ticker, memo): self.uniqueid = uniqueid self.name = name self.ticker = ticker self.memo = memo class Signon: def __init__(self, code, severity, message): self.code = code self.severity = severity self.message = message if int(code) == 0: self.success = True else: self.success = False def __str__(self): ret = "\t\r\n" + "\t\t\r\n" + "\t\t\t\r\n" ret += "\t\t\t\t%s\r\n" % self.code ret += "\t\t\t\t%s\r\n" % self.severity if self.message: ret += "\t\t\t\t%s\r\n" % self.message ret += "\t\t\t\r\n" + "\t\t\r\n" + "\t\r\n" return ret class Statement(object): def __init__(self): self.start_date = '' self.end_date = '' self.currency = '' self.transactions = [] # Error tracking: self.discarded_entries = [] self.warnings = [] class InvestmentStatement(object): def __init__(self): self.positions = [] self.transactions = [] # Error tracking: self.discarded_entries = [] self.warnings = [] class Transaction(object): def __init__(self): self.payee = '' self.type = '' self.date = None self.amount = None self.id = '' self.memo = '' self.sic = None self.mcc = '' self.checknum = '' def __repr__(self): return "" class InvestmentTransaction(object): (Unknown, BuyMF, SellMF, Reinvest, BuyStock, SellStock) = [x for x in range(-1, 5)] def __init__(self, type): try: self.type = ['buymf', 'sellmf', 'reinvest', 'buystock', 'sellstock'].index(type.lower()) except ValueError: self.type = InvestmentTransaction.Unknown self.tradeDate = None self.settleDate = None self.security = '' self.units = decimal.Decimal(0) self.unit_price = decimal.Decimal(0) def __repr__(self): return "" class Position(object): def __init__(self): self.security = '' self.units = decimal.Decimal(0) self.unit_price = decimal.Decimal(0) class Institution(object): def __init__(self): self.organization = '' self.fid = '' class OfxParserException(Exception): pass class OfxParser(object): @classmethod def parse(cls_, file_handle, fail_fast=True): ''' parse is the main entry point for an OfxParser. It takes a file handle and an optional log_errors flag. If fail_fast is True, the parser will fail on any errors. If fail_fast is False, the parser will log poor statements in the statement class and continue to run. Note: the library does not guarantee that no exceptions will be raised to the caller, only that statements will include bad transactions (which are marked). ''' cls_.fail_fast = fail_fast if isinstance(file_handle, type('')): raise RuntimeError(six.u("parse() takes in a file handle, not a string")) ofx_obj = Ofx() # Store the headers ofx_file = OfxPreprocessedFile(file_handle) ofx_obj.headers = ofx_file.headers ofx_obj.accounts = [] ofx_obj.signon = None ofx = soup_maker(ofx_file.fh) if len(ofx.contents) == 0: raise OfxParserException('The ofx file is empty!') sonrs_ofx = ofx.find('sonrs') if sonrs_ofx: ofx_obj.signon = cls_.parseSonrs(sonrs_ofx) stmtrs_ofx = ofx.findAll('stmtrs') if stmtrs_ofx: ofx_obj.accounts += cls_.parseStmtrs(stmtrs_ofx, AccountType.Bank) ccstmtrs_ofx = ofx.findAll('ccstmtrs') if ccstmtrs_ofx: ofx_obj.accounts += cls_.parseStmtrs( ccstmtrs_ofx, AccountType.CreditCard) invstmtrs_ofx = ofx.findAll('invstmtrs') if invstmtrs_ofx: ofx_obj.accounts += cls_.parseInvstmtrs(invstmtrs_ofx) seclist_ofx = ofx.find('seclist') if seclist_ofx: ofx_obj.security_list = cls_.parseSeclist(seclist_ofx) else: ofx_obj.security_list = None acctinfors_ofx = ofx.find('acctinfors') if acctinfors_ofx: ofx_obj.accounts += cls_.parseAcctinfors(acctinfors_ofx, ofx) fi_ofx = ofx.find('fi') if fi_ofx: for account in ofx_obj.accounts: account.institution = cls_.parseOrg(fi_ofx) if ofx_obj.accounts: ofx_obj.account = ofx_obj.accounts[0] return ofx_obj @classmethod def parseOfxDateTime(cls_, ofxDateTime): # dateAsString looks something like 20101106160000.00[-5:EST] # for 6 Nov 2010 4pm UTC-5 aka EST # Some places (e.g. Newfoundland) have non-integer offsets. res = re.search("\[(?P[-+]?\d+\.?\d*)\:\w*\]$", ofxDateTime) if res: tz = float(res.group('tz')) else: tz = 0 timeZoneOffset = datetime.timedelta(hours=tz) try: local_date = datetime.datetime.strptime( ofxDateTime[:14], '%Y%m%d%H%M%S' ) return local_date - timeZoneOffset except: return datetime.datetime.strptime( ofxDateTime[:8], '%Y%m%d') - timeZoneOffset @classmethod def parseAcctinfors(cls_, acctinfors_ofx, ofx): all_accounts = [] for i in acctinfors_ofx.findAll('acctinfo'): accounts = [] if i.find('invacctinfo'): accounts += cls_.parseInvstmtrs([i]) elif i.find('ccacctinfo'): accounts += cls_.parseStmtrs([i], AccountType.CreditCard) elif i.find('bankacctinfo'): accounts += cls_.parseStmtrs([i], AccountType.Bank) else: continue fi_ofx = ofx.find('fi') if fi_ofx: for account in ofx_obj.accounts: account.institution = cls_.parseOrg(fi_ofx) desc = i.find('desc') if hasattr(desc, 'contents'): for account in accounts: account.desc = desc.contents[0].strip() all_accounts += accounts return all_accounts @classmethod def parseInvstmtrs(cls_, invstmtrs_list): ret = [] for invstmtrs_ofx in invstmtrs_list: account = InvestmentAccount() acctid_tag = invstmtrs_ofx.find('acctid') if (hasattr(acctid_tag, 'contents')): try: account.account_id = acctid_tag.contents[0].strip() except IndexError: account.warnings.append( six.u("Empty acctid tag for %s") % invstmtrs_ofx) if cls_.fail_fast: raise brokerid_tag = invstmtrs_ofx.find('brokerid') if (hasattr(brokerid_tag, 'contents')): try: account.brokerid = brokerid_tag.contents[0].strip() except IndexError: account.warnings.append( six.u("Empty brokerid tag for %s") % invstmtrs_ofx) if cls_.fail_fast: raise account.type = AccountType.Investment if (invstmtrs_ofx): account.statement = cls_.parseInvestmentStatement( invstmtrs_ofx) ret.append(account) return ret @classmethod def parseSeclist(cls_, seclist_ofx): securityList = [] for secinfo_ofx in seclist_ofx.findAll('secinfo'): uniqueid_tag = secinfo_ofx.find('uniqueid') name_tag = secinfo_ofx.find('secname') ticker_tag = secinfo_ofx.find('ticker') memo_tag = secinfo_ofx.find('memo') if uniqueid_tag and name_tag and ticker_tag: try: memo = memo_tag.contents[0].strip() except AttributeError: # memo can be empty memo = None securityList.append( Security(uniqueid_tag.contents[0].strip(), name_tag.contents[0].strip(), ticker_tag.contents[0].strip(), memo)) return securityList @classmethod def parseInvestmentPosition(cls_, ofx): position = Position() tag = ofx.find('uniqueid') if (hasattr(tag, 'contents')): position.security = tag.contents[0].strip() tag = ofx.find('units') if (hasattr(tag, 'contents')): position.units = decimal.Decimal(tag.contents[0].strip()) tag = ofx.find('unitprice') if (hasattr(tag, 'contents')): position.unit_price = decimal.Decimal(tag.contents[0].strip()) tag = ofx.find('dtpriceasof') if (hasattr(tag, 'contents')): try: position.date = cls_.parseOfxDateTime(tag.contents[0].strip()) except ValueError: raise return position @classmethod def parseInvestmentTransaction(cls_, ofx): transaction = InvestmentTransaction(ofx.name) tag = ofx.find('fitid') if (hasattr(tag, 'contents')): transaction.id = tag.contents[0].strip() tag = ofx.find('memo') if (hasattr(tag, 'contents')): transaction.memo = tag.contents[0].strip() tag = ofx.find('dttrade') if (hasattr(tag, 'contents')): try: transaction.tradeDate = cls_.parseOfxDateTime( tag.contents[0].strip()) except ValueError: raise tag = ofx.find('dtsettle') if (hasattr(tag, 'contents')): try: transaction.settleDate = cls_.parseOfxDateTime( tag.contents[0].strip()) except ValueError: raise tag = ofx.find('uniqueid') if (hasattr(tag, 'contents')): transaction.security = tag.contents[0].strip() tag = ofx.find('units') if (hasattr(tag, 'contents')): transaction.units = decimal.Decimal(tag.contents[0].strip()) tag = ofx.find('unitprice') if (hasattr(tag, 'contents')): transaction.unit_price = decimal.Decimal(tag.contents[0].strip()) return transaction @classmethod def parseInvestmentStatement(cls_, invstmtrs_ofx): statement = InvestmentStatement() currency_tag = invstmtrs_ofx.find('curdef') if hasattr(currency_tag, "contents"): statement.currency = currency_tag.contents[0].strip().lower() invtranlist_ofx = invstmtrs_ofx.find('invtranlist') if (invtranlist_ofx is not None): tag = invtranlist_ofx.find('dtstart') if (hasattr(tag, 'contents')): try: statement.start_date = cls_.parseOfxDateTime( tag.contents[0].strip()) except IndexError: statement.warnings.append(six.u('Empty start date.')) if cls_.fail_fast: raise except ValueError: e = sys.exc_info()[1] statement.warnings.append(six.u('Invalid start date: %s') % e) if cls_.fail_fast: raise tag = invtranlist_ofx.find('dtend') if (hasattr(tag, 'contents')): try: statement.end_date = cls_.parseOfxDateTime( tag.contents[0].strip()) except IndexError: statement.warnings.append(six.u('Empty end date.')) except ValueError: e = sys.exc_info()[1] statement.warnings.append(six.u('Invalid end date: %s') % e) if cls_.fail_fast: raise for transaction_type in ['posmf', 'posstock', 'posopt']: try: for investment_ofx in invstmtrs_ofx.findAll(transaction_type): statement.positions.append( cls_.parseInvestmentPosition(investment_ofx)) except (ValueError, IndexError, decimal.InvalidOperation, TypeError): e = sys.exc_info()[1] if cls_.fail_fast: raise statement.discarded_entries.append( {six.u('error'): six.u("Error parsing positions: ") + str(e), six.u('content'): investment_ofx} ) for transaction_type in ['buymf', 'sellmf', 'reinvest', 'buystock', 'sellstock', 'buyopt', 'sellopt']: try: for investment_ofx in invstmtrs_ofx.findAll(transaction_type): statement.transactions.append( cls_.parseInvestmentTransaction(investment_ofx)) except (ValueError, IndexError, decimal.InvalidOperation): e = sys.exc_info()[1] if cls_.fail_fast: raise statement.discarded_entries.append( {six.u('error'): transaction_type + ": " + str(e), six.u('content'): investment_ofx} ) return statement @classmethod def parseOrg(cls_, fi_ofx): institution = Institution() org = fi_ofx.find('org') if hasattr(org, 'contents'): institution.organization = org.contents[0].strip() fid = fi_ofx.find('fid') if hasattr(fid, 'contents'): institution.fid = fid.contents[0].strip() return institution @classmethod def parseSonrs(cls_, sonrs): code = int(sonrs.find('code').contents[0].strip()) severity = sonrs.find('severity').contents[0].strip() try: message = sonrs.find('message').contents[0].strip() except: message = '' return Signon(code,severity,message) @classmethod def parseStmtrs(cls_, stmtrs_list, accountType): ''' Parse the tags and return a list of Accounts object. ''' ret = [] for stmtrs_ofx in stmtrs_list: account = Account() acctid_tag = stmtrs_ofx.find('acctid') if hasattr(acctid_tag, 'contents'): account.account_id = acctid_tag.contents[0].strip() bankid_tag = stmtrs_ofx.find('bankid') if hasattr(bankid_tag, 'contents'): account.routing_number = bankid_tag.contents[0].strip() branchid_tag = stmtrs_ofx.find('branchid') if hasattr(branchid_tag, 'contents'): account.branch_id = branchid_tag.contents[0].strip() type_tag = stmtrs_ofx.find('accttype') if hasattr(type_tag, 'contents'): account.account_type = type_tag.contents[0].strip() account.type = accountType if stmtrs_ofx: account.statement = cls_.parseStatement(stmtrs_ofx) ret.append(account) return ret @classmethod def parseStatement(cls_, stmt_ofx): ''' Parse a statement in ofx-land and return a Statement object. ''' statement = Statement() dtstart_tag = stmt_ofx.find('dtstart') if hasattr(dtstart_tag, "contents"): try: statement.start_date = cls_.parseOfxDateTime( dtstart_tag.contents[0].strip()) except IndexError: statement.warnings.append( six.u("Statement start date was empty for %s") % stmt_ofx) if cls_.fail_fast: raise except ValueError: statement.warnings.append( six.u("Statement start date was not allowed for %s") % stmt_ofx) if cls_.fail_fast: raise dtend_tag = stmt_ofx.find('dtend') if hasattr(dtend_tag, "contents"): try: statement.end_date = cls_.parseOfxDateTime( dtend_tag.contents[0].strip()) except IndexError: statement.warnings.append( six.u("Statement start date was empty for %s") % stmt_ofx) if cls_.fail_fast: raise except ValueError: ve = sys.exc_info()[1] msg = six.u("Statement start date was not formatted " "correctly for %s") statement.warnings.append(msg % stmt_ofx) if cls_.fail_fast: raise except TypeError: statement.warnings.append( six.u("Statement start date was not allowed for %s") % stmt_ofx) if cls_.fail_fast: raise currency_tag = stmt_ofx.find('curdef') if hasattr(currency_tag, "contents"): try: statement.currency = currency_tag.contents[0].strip().lower() except IndexError: statement.warnings.append( six.u("Currency definition was empty for %s") % stmt_ofx) if cls_.fail_fast: raise ledger_bal_tag = stmt_ofx.find('ledgerbal') if hasattr(ledger_bal_tag, "contents"): balamt_tag = ledger_bal_tag.find('balamt') if hasattr(balamt_tag, "contents"): try: statement.balance = decimal.Decimal( balamt_tag.contents[0].strip()) except (IndexError, decimal.InvalidOperation): ex = sys.exc_info()[1] statement.warnings.append( six.u("Ledger balance amount was empty for %s") % stmt_ofx) if cls_.fail_fast: raise OfxParserException("Empty ledger balance") avail_bal_tag = stmt_ofx.find('availbal') if hasattr(avail_bal_tag, "contents"): balamt_tag = avail_bal_tag.find('balamt') if hasattr(balamt_tag, "contents"): try: statement.available_balance = decimal.Decimal( balamt_tag.contents[0].strip()) except (IndexError, decimal.InvalidOperation): ex = sys.exc_info()[1] msg = six.u("Available balance amount was empty for %s") statement.warnings.append(msg % stmt_ofx) if cls_.fail_fast: raise OfxParserException("Empty available balance") for transaction_ofx in stmt_ofx.findAll('stmttrn'): try: statement.transactions.append( cls_.parseTransaction(transaction_ofx)) except OfxParserException: ofxError = sys.exc_info()[1] statement.discarded_entries.append( {'error': str(ofxError), 'content': transaction_ofx}) if cls_.fail_fast: raise return statement @classmethod def parseTransaction(cls_, txn_ofx): ''' Parse a transaction in ofx-land and return a Transaction object. ''' transaction = Transaction() type_tag = txn_ofx.find('trntype') if hasattr(type_tag, 'contents'): try: transaction.type = type_tag.contents[0].lower().strip() except IndexError: raise OfxParserException(six.u("Empty transaction type")) except TypeError: raise OfxParserException( six.u("No Transaction type (a required field)")) name_tag = txn_ofx.find('name') if hasattr(name_tag, "contents"): try: transaction.payee = name_tag.contents[0].strip() except IndexError: raise OfxParserException(six.u("Empty transaction name")) except TypeError: raise OfxParserException( six.u("No Transaction name (a required field)")) memo_tag = txn_ofx.find('memo') if hasattr(memo_tag, "contents"): try: transaction.memo = memo_tag.contents[0].strip() except IndexError: # Memo can be empty. pass except TypeError: pass amt_tag = txn_ofx.find('trnamt') if hasattr(amt_tag, "contents"): try: transaction.amount = decimal.Decimal( amt_tag.contents[0].strip()) except IndexError: raise OfxParserException("Invalid Transaction Date") except decimal.InvalidOperation: raise OfxParserException( six.u("Invalid Transaction Amount: '%s'") % amt_tag.contents[0]) except TypeError: raise OfxParserException( six.u("No Transaction Amount (a required field)")) else: raise OfxParserException( six.u("Missing Transaction Amount (a required field)")) date_tag = txn_ofx.find('dtposted') if hasattr(date_tag, "contents"): try: transaction.date = cls_.parseOfxDateTime( date_tag.contents[0].strip()) except IndexError: raise OfxParserException("Invalid Transaction Date") except ValueError: ve = sys.exc_info()[1] raise OfxParserException(str(ve)) except TypeError: raise OfxParserException( six.u("No Transaction Date (a required field)")) else: raise OfxParserException( six.u("Missing Transaction Date (a required field)")) id_tag = txn_ofx.find('fitid') if hasattr(id_tag, "contents"): try: transaction.id = id_tag.contents[0].strip() except IndexError: raise OfxParserException(six.u("Empty FIT id (a required field)")) except TypeError: raise OfxParserException(six.u("No FIT id (a required field)")) else: raise OfxParserException(six.u("Missing FIT id (a required field)")) sic_tag = txn_ofx.find('sic') if hasattr(sic_tag, 'contents'): try: transaction.sic = sic_tag.contents[0].strip() except IndexError: raise OfxParserException(six.u("Empty transaction Standard Industry Code (SIC)")) if transaction.sic is not None and transaction.sic in mcc.codes: try: transaction.mcc = mcc.codes.get(transaction.sic, '').get('combined description') except IndexError: raise OfxParserException(six.u("Empty transaction Merchant Category Code (MCC)")) except AttributeError: if cls._fail_fast: raise checknum_tag = txn_ofx.find('checknum') if hasattr(checknum_tag, 'contents'): try: transaction.checknum = checknum_tag.contents[0].strip() except IndexError: raise OfxParserException(six.u("Empty Check (or other reference) number")) return transaction ofxparse-0.14/ofxparse/mcc.py0000664000175000017500000061267712116146620020010 0ustar jseutterjseutter00000000000000# MCC: Merchant Category Codes from # * https://github.com/greggles/mcc-codes codes={ '0':{'combined description':'none', 'USDA description':'none','IRS Description':'none', 'Reportable under 6041/6041A and Authority for Exception':'no'}, '742':{'combined description':'Veterinary Services', 'USDA description':'Veterinary Services','IRS Description':'Veterinary Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '763':{'combined description':'Agricultural Co-operatives', 'USDA description':'Agricultural Co-operatives','IRS Description':'Agricultural Cooperative', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '780':{'combined description':'Horticultural Services, Landscaping Services', 'USDA description':'Horticultural Services','IRS Description':'Landscaping Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '1520':{'combined description':'General Contractors-Residential and Commercial', 'USDA description':'General Contractors-Residential and Commercial','IRS Description':'General Contractors', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '1711':{'combined description':'Air Conditioning Contractors & Sales and Installation, Heating Contractors & Sales, Service, Installation', 'USDA description':'Air Conditioning Contractors & Sales and Installation','IRS Description':'Heating, Plumbing, A/C', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '1731':{'combined description':'Electrical Contractors', 'USDA description':'Electrical Contractors','IRS Description':'Electrical Contractors', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '1740':{'combined description':'Insulation & Contractors, Masonry, Stonework Contractors, Plastering Contractors, Stonework and Masonry Contractors, Tile Settings Contractors', 'USDA description':'Insulation & Contractors','IRS Description':'Masonry, Stonework, and Plaster', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '1750':{'combined description':'Carpentry Contractors', 'USDA description':'Carpentry Contractors','IRS Description':'Carpentry Contractors', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '1761':{'combined description':'Roofing & Contractors, Sheet Metal Work & Contractors, Siding & Contractors', 'USDA description':'Roofing - Contractors','IRS Description':'Roofing/Siding, Sheet Metal', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '1771':{'combined description':'Contractors & Concrete Work', 'USDA description':'Contractors & Concrete Work','IRS Description':'Concrete Work Contractors', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '1799':{'combined description':'Contractors & Special Trade, Not Elsewhere Classified', 'USDA description':'Contractors & Special Trade, Not Elsewhere Classified','IRS Description':'Special Trade Contractors', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '2741':{'combined description':'Miscellaneous Publishing and Printing', 'USDA description':'Miscellaneous Publishing and Printing','IRS Description':'Miscellaneous Publishing and Printing', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '2791':{'combined description':'Typesetting, Plate Making, & Related Services', 'USDA description':'Typesetting, Plate Making, & Related Services','IRS Description':'Typesetting, Plate Making, and Related Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '2842':{'combined description':'Specialty Cleaning, Polishing, and Sanitation Preparations', 'USDA description':'Specialty Cleaning, Polishing, and Sanitation Preparations','IRS Description':'Specialty Cleaning', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3000':{'combined description':'UNITED AIRLINES', 'USDA description':'UNITED AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3001':{'combined description':'AMERICAN AIRLINES', 'USDA description':'AMERICAN AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3002':{'combined description':'PAN AMERICAN - PAN AM', 'USDA description':'PAN AMERICAN','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3003':{'combined description':'EURO-FLY', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3004':{'combined description':'TRANS WORLD AIRLINES', 'USDA description':'TRANS WORLD AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3005':{'combined description':'BRITSH AIRWAYS - BRITISH A', 'USDA description':'BRITISH AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3006':{'combined description':'JAPAN AIR LINES', 'USDA description':'JAPAN AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3007':{'combined description':'AIR FRANCE', 'USDA description':'AIR FRANCE','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3008':{'combined description':'LUFTHANSA', 'USDA description':'LUFTHANSA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3009':{'combined description':'AIR CANADA - AIR CAN', 'USDA description':'AIR CANADA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3010':{'combined description':'KLM', 'USDA description':'KLM (ROYAL DUTCH AIRLINES)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3011':{'combined description':'AEROFLOT', 'USDA description':'AEORFLOT','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3012':{'combined description':'QANTAS AIR', 'USDA description':'QUANTAS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3013':{'combined description':'ALITALIA', 'USDA description':'ALITALIA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3014':{'combined description':'SAUDI ARABIAN AIRLINES', 'USDA description':'SAUDIA ARABIAN AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3015':{'combined description':'SWISS INTERNATIONAL AIR LINES-SWISS AIR', 'USDA description':'SWISSAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3016':{'combined description':'SCANDINAVIAN AIRLINE SYSTEM (SAS)', 'USDA description':'SAS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3017':{'combined description':'SOUTH AFRICAN AIRWAYS', 'USDA description':'SOUTH AFRICAN AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3018':{'combined description':'VARIG AIR (BRAZIL)', 'USDA description':'VARIG (BRAZIL)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3019':{'combined description':'GERMANWINGS--GRMNWGAIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3020':{'combined description':'AIR INDIA', 'USDA description':'AIR-INDIA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3021':{'combined description':'AIR ALGERIE', 'USDA description':'AIR ALGERIE','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3022':{'combined description':'PHILIPPINE AIRLINES', 'USDA description':'PHILIPPINE AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3023':{'combined description':'MEXICANA', 'USDA description':'MEXICANA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3024':{'combined description':'PAKISTAN INTERNATIONAL', 'USDA description':'PAKISTAN INTERNATIONAL','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3025':{'combined description':'AIR NEW ZEALAND LTD. INTERNATIONAL', 'USDA description':'AIR NEW ZEALAND','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3026':{'combined description':'EMIRATES AIRLINES', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3027':{'combined description':'UNION DE TRANSPORTS AERIENS (UTA/INTERAI', 'USDA description':'UTA/INTERAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3028':{'combined description':'AIR MALTA', 'USDA description':'AIR MALTA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3029':{'combined description':'SN BRUSSELS AIRLINES - SNBRU AIR', 'USDA description':'SABENA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3030':{'combined description':'AEROLINEAS ARGENTINAS', 'USDA description':'AEROLINEAS ARGENTINAS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3031':{'combined description':'OLYMPIC AIRWAYS', 'USDA description':'OLYMPIC AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3032':{'combined description':'EL AL', 'USDA description':'EL AL','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3033':{'combined description':'ANSETT AIRLINES', 'USDA description':'ANSETT AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3034':{'combined description':'TRANS AUSTRALIAN AIRWAYS (TAA)', 'USDA description':'AUSTRAINLIAN AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3035':{'combined description':'TAP AIRLINE (PORTUGAL)', 'USDA description':'TAP (PORTUGAL)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3036':{'combined description':'VASP AIR (BRAZIL)', 'USDA description':'VASP (BRAZIL)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3037':{'combined description':'EGYPTAIR', 'USDA description':'EGYPTAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3038':{'combined description':'KUWAIT AIRWAYS', 'USDA description':'KUWAIT AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3039':{'combined description':'AVIANCA', 'USDA description':'AVIANCA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3040':{'combined description':'GULF AIR (BAHRAIN)', 'USDA description':'GULF AIR (BAHRAIN)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3041':{'combined description':'BALKAN-BULGARIAN AIRLINES', 'USDA description':'BALKAN-BULGARIAN AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3042':{'combined description':'FINNAIR', 'USDA description':'FINNAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3043':{'combined description':'AER LINGUS', 'USDA description':'AER LINGUS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3044':{'combined description':'AIR LANKA', 'USDA description':'AIR LANKA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3045':{'combined description':'NIGERIA AIRWAYS', 'USDA description':'NIGERIA AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3046':{'combined description':'CRUZEIRO DO SUL AIR (BRAZIL)', 'USDA description':'CRUZEIRO DO SUL (BRAZIJ)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3047':{'combined description':'THY AIRLINE (TURKEY)', 'USDA description':'THY (TURKEY)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3048':{'combined description':'AIRMARO', 'USDA description':'ROYAL AIR MAROC','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3049':{'combined description':'TUNIS AIR', 'USDA description':'TUNIS AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3050':{'combined description':'ICELANDAIR', 'USDA description':'ICELANDAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3051':{'combined description':'AUSTRIAN AIRLINES', 'USDA description':'AUSTRIAN AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3052':{'combined description':'LAN AIRLINES-LANAIR', 'USDA description':'LANCHILE','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3053':{'combined description':'AVIACO AIR (SPAIN)', 'USDA description':'AVIACO (SPAIN)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3054':{'combined description':'LADECO AIR (CHILE)', 'USDA description':'LADECO (CHILE)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3055':{'combined description':'LAB AIRLINE (BOLIVIA)', 'USDA description':'LAB (BOLIVIA)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3056':{'combined description':'QUEBECAIRE', 'USDA description':'QUEBECAIRE','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3057':{'combined description':'EAST/WEST AIRLINES (AUSTRALIA)', 'USDA description':'EASTWEST AIRLINES (AUSTRALIA)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3058':{'combined description':'DELTA', 'USDA description':'DELTA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3059':{'combined description':'DBA AIRLINES - DBA AIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3060':{'combined description':'NORTHWEST AIRLINES', 'USDA description':'NORTHWEST','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3061':{'combined description':'CONTINENTAL', 'USDA description':'CONTINENTAL','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3062':{'combined description':'HAPAG-LLOYD EXPRESS - HLX', 'USDA description':'WESTERN','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3063':{'combined description':'US AIRWAYS', 'USDA description':'US AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3064':{'combined description':'ADRIA AIRWAYS', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3065':{'combined description':'AIRINTER', 'USDA description':'AIRINTER','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3066':{'combined description':'SOUTHWEST AIRLINES', 'USDA description':'SOUTHWEST','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3067':{'combined description':'VANGUARD AIRLINES', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3068':{'combined description':'AIR ASTANA-AIRSTANA', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3069':{'combined description':'AIR EUROPE', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3070':{'combined description':'PACIFIC SOUTHWEST AIRLINE', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3071':{'combined description':'AIR BRITISH COLUMBIA', 'USDA description':'AIR BRITISH COLUBIA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3072':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3073':{'combined description':'AIR CAL', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3074':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3075':{'combined description':'SINGAPORE AIRLINES', 'USDA description':'SINGAPORE AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3076':{'combined description':'AEROMEXICO', 'USDA description':'AEROMEXICO','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3077':{'combined description':'THAI AIRWAYS', 'USDA description':'THAI AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3078':{'combined description':'CHINA AIRLINES', 'USDA description':'CHINA AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3079':{'combined description':'JETSTAR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3080':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3081':{'combined description':'NORDAIR', 'USDA description':'NORDAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3082':{'combined description':'KOREAN AIRLINES', 'USDA description':'KOREAN AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3083':{'combined description':'AIR AFRIQUE - AIR AFRIQ', 'USDA description':'AIR AFRIGUE','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3084':{'combined description':'EVA AIRLINES', 'USDA description':'EVA AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3085':{'combined description':'MIDWEST EXPRESS AIRLINES - MIDWEST', 'USDA description':'MIDWEST EXPRESS AIRLINES, INC.','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3086':{'combined description':'CARNIVAL AIRLINES', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3087':{'combined description':'METRO AIRLINES', 'USDA description':'METRO AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3088':{'combined description':'CROATIA AIR - CROATIA', 'USDA description':'CROATIA AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3089':{'combined description':'TRANSAERO', 'USDA description':'TRANSAERO','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3090':{'combined description':'UNI AIRWAYS', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3091':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3092':{'combined description':'MIDWAY AIRLINES', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3093':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3094':{'combined description':'ZAMBIA AIRWAYS', 'USDA description':'ZAMBIA AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3095':{'combined description':'WARDAIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3096':{'combined description':'AIR ZIMBABWE', 'USDA description':'AIR ZIMBABWE','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3097':{'combined description':'SPANAIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3098':{'combined description':'ASIANA AIRLINES - ASIANA', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3099':{'combined description':'CATHAY PACIFIC', 'USDA description':'CATHAY PACIFIC','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3100':{'combined description':'MALAYSIAN AIRLINE SYSTEM', 'USDA description':'MALAYSIAN AIRLINE SYSTEM','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3101':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3102':{'combined description':'IBERIA', 'USDA description':'IBERIA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3103':{'combined description':'GARUDA AIR (INDONESIA)', 'USDA description':'GARUDA (INDONESIA)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3104':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3105':{'combined description':'PIEDMONT', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3106':{'combined description':'BRAATHENS AIR S.A.F.E. (NORWAY)', 'USDA description':'BRAATHENS S.A.F.E. (NORWAY)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3107':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3108':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3109':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3110':{'combined description':'WINGS AIRWAYS', 'USDA description':'WINGS AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3111':{'combined description':'BRITISH MIDLAND', 'USDA description':'BRITISH MIDLAND','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3112':{'combined description':'WINDWARD ISLAND', 'USDA description':'WINDWARD ISLAND','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3113':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3114':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3115':{'combined description':'TOWER AIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3116':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3117':{'combined description':'VENEZOLANA INTERNATIONAL DE AVIACION (VI', 'USDA description':'VIASA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3118':{'combined description':'VALLEY AIRLINES', 'USDA description':'VALLEY AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3119':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3120':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3121':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3122':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3123':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3124':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3125':{'combined description':'TAN AIRLINES', 'USDA description':'TAN','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3126':{'combined description':'TALAIR', 'USDA description':'TALAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3127':{'combined description':'TACA INTERNATIONAL', 'USDA description':'TACA INTERNATIONAL','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3128':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3129':{'combined description':'SURINAM AIRWAYS', 'USDA description':'SURINAM AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3130':{'combined description':'SUNWORLD INTERNATIONAL AIR', 'USDA description':'SUN WORLD INTERNATIONAL','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3131':{'combined description':'VLM AIRLINES', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3132':{'combined description':'FRONTIER AIRLINES - FRONTIER', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3133':{'combined description':'SUNBELT AIRLINES', 'USDA description':'SUNBELT AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3134':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3135':{'combined description':'SUDAN AIRWAYS', 'USDA description':'SUDAN AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3136':{'combined description':'QATAR AIRWAYS', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3137':{'combined description':'SINGLETION AIR', 'USDA description':'SINGLETON','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3138':{'combined description':'SIMMONS AIRLINES', 'USDA description':'SIMMONS AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3139':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3140':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3141':{'combined description':'SEAIR ALASKA', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3142':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3143':{'combined description':'SCENIC AIRLINES', 'USDA description':'SCENIC AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3144':{'combined description':'VIRGIN ATLANTIC', 'USDA description':'VIRGIN ATLANTIC','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3145':{'combined description':'SAN JUAN AIRLINES', 'USDA description':'SAN JUAN AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3146':{'combined description':'LUXAIR', 'USDA description':'LUXAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3147':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3148':{'combined description':'AIR LITTORAL, S.A.', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3149':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3150':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3151':{'combined description':'AIR ZAIRE', 'USDA description':'AIR ZAIRE','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3152':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3153':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3154':{'combined description':'PRINCEVILLE', 'USDA description':'PRINCEVILLE','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3155':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3156':{'combined description':'GO FLY, LTD.', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3157':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3158':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3159':{'combined description':'PROVINCETOWN-BOSTON AIRWAYS (PBA) AIRLIN', 'USDA description':'PBA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3160':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3161':{'combined description':'ALL NIPON AIRWAYS', 'USDA description':'ALL NIPPON AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3162':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3163':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3164':{'combined description':'NORONTAIR', 'USDA description':'NORONTAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3165':{'combined description':'NEW YORK HELICOPTER', 'USDA description':'NEW YORK HELICOPTER','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3166':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3167':{'combined description':'AERO CONTINENTE - AERO CONT', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3168':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3169':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3170':{'combined description':'MOUNT COOK', 'USDA description':'NOUNT COOK','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3171':{'combined description':'CANADIAN AIRLINES INTERNATIONAL', 'USDA description':'CANADIAN AIRLINES INTERNATIONAL','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3172':{'combined description':'NATIONAIR', 'USDA description':'NATIONAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3173':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3174':{'combined description':'JETBLUE AIRLINES', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3175':{'combined description':'MIDDLE EAST AIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3176':{'combined description':'METROFLIGHT AIRLINES', 'USDA description':'METROFLIGHT AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3177':{'combined description':'AIRTRAN AIRWAYS - AIRTRAN A', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3178':{'combined description':'MESA AIR', 'USDA description':'MESA AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3179':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3180':{'combined description':'WESTJETAIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3181':{'combined description':'MALEV AIR', 'USDA description':'MALEV','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3182':{'combined description':'LOT (POLISH AIRLINES)', 'USDA description':'LOT (POLAND)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3183':{'combined description':'OMANAIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3184':{'combined description':'LIAT', 'USDA description':'LIAT','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3185':{'combined description':'LINEA AEROPOSTAL VENEZOLANA (LAV)', 'USDA description':'LAV (VENEZUELA)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3186':{'combined description':'LINEAS AEREAS PARAGUAYAS (LAP)', 'USDA description':'LAP (PARAGUAY)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3187':{'combined description':'LACSA AIR (COSTA RICA)', 'USDA description':'LACSA (COSTA RICA)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3188':{'combined description':'VIRGINEXPAIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3189':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3190':{'combined description':'JUGOSLAV AIR', 'USDA description':'JUGOSLAV AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3191':{'combined description':'ISLAND AIRLINES', 'USDA description':'ISLAND AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3192':{'combined description':'IRAN AIR', 'USDA description':'IRAN AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3193':{'combined description':'INDIAN AIRLINES', 'USDA description':'INDIAN AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3194':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3195':{'combined description':'HOLIDAY AIRLINES', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3196':{'combined description':'HAWAIIAN AIR', 'USDA description':'HAWAIIAN AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3197':{'combined description':'HAVASU AIRLINES', 'USDA description':'HAVASU AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3198':{'combined description':'HARBOR AIRLINES', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3199':{'combined description':'SERVICIOS AEREOS MILITARES', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3200':{'combined description':'GUYANA AIRWAYS', 'USDA description':'FUYANA AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3201':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3202':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3203':{'combined description':'GOLDEN PACIFIC AIR', 'USDA description':'GOLDEN PACIFIC AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3204':{'combined description':'FREEDOM AIRLINES', 'USDA description':'FREEDOM AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3205':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3206':{'combined description':'CHINA EASTERN AIRLINES - CHINAEAST', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3207':{'combined description':'EMPRESA ECUATORIANA', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3208':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3209':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3210':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3211':{'combined description':'NORWEGIAN AIR SHUTTLE - NORWEGIAN', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3212':{'combined description':'DOMINICANA DE AVIACION', 'USDA description':'DOMINICANA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3213':{'combined description':'MALMO AVIATION', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3214':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3215':{'combined description':'DAN AIR SERVICES', 'USDA description':'DAN AIR SERVICES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3216':{'combined description':'CUMBERLAND AIRLINES', 'USDA description':'CUMBERLAND AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3217':{'combined description':'CESKOSLOVENSKE AEROLINIE (CSA)', 'USDA description':'CSA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3218':{'combined description':'CROWN AIR', 'USDA description':'CROWN AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3219':{'combined description':'COMPANIA PANAMENA DE AVIACION (COPA)', 'USDA description':'COPA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3220':{'combined description':'COMPANIA FAUCETT', 'USDA description':'COMPANIA FAUCETT','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3221':{'combined description':'TRANSPORTES AEROS MILITARES ECUATORIANOS', 'USDA description':'TRANSPORTES AEROS MILITARES ECCUATORANOS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3222':{'combined description':'COMMAND AIRWAYS', 'USDA description':'COMMAND AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3223':{'combined description':'COMAIR', 'USDA description':'COMAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3224':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3225':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3226':{'combined description':'SKYWAYS AIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3227':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3228':{'combined description':'CAYMAN AIRWAYS', 'USDA description':'CAYMAN AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3229':{'combined description':'SAETA (SOCIEDAD ECUATORIANOS DE TRANSPOR', 'USDA description':'SAETA SOCIAEDAD ECUATORIANOS DE TRANSPORTES AEREOS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3230':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3231':{'combined description':'SAHSA (SERVICIO AERO DE HONDURAS)', 'USDA description':'SASHA SERVICIO AERO DE HONDURAS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3232':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3233':{'combined description':'CAPITOL AIR', 'USDA description':'CAPITOL AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3234':{'combined description':'CARIBBEAN AIRLINES', 'USDA description':'BWIA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3235':{'combined description':'BROCKWAY AIR', 'USDA description':'BROKWAY AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3236':{'combined description':'AIR ARABIA', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3237':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3238':{'combined description':'BEMIDJI AVIATION', 'USDA description':'BEMIDJI AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3239':{'combined description':'BAR HARBOR AIRLINES', 'USDA description':'BAR HARBOR AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3240':{'combined description':'BAHAMASAIR', 'USDA description':'BAHAMASAIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3241':{'combined description':'AVIATECA AIR (GUATEMALA)', 'USDA description':'AVIATECA (GUATEMALA)','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3242':{'combined description':'CARIBBEAN AIRLINES--CARIBBEAN', 'USDA description':'AVENSA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3243':{'combined description':'AUSTRIAN AIR SERVICE', 'USDA description':'AUSTRIAN AIR SERVICE','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3244':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3245':{'combined description':'EASYJET AIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3246':{'combined description':'RYANAIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3247':{'combined description':'GOL AIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3248':{'combined description':'TAM AIR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3249':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3250':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3251':{'combined description':'ALOHA AIR', 'USDA description':'ALOHA AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3252':{'combined description':'ANTILEAN AIRLINES (ALM)', 'USDA description':'ALM','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3253':{'combined description':'AMERICA WEST', 'USDA description':'AMERICA WEST','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3254':{'combined description':'U.S. AIR SHUTTLE', 'USDA description':'TRUMP AIRLINE','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3255':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3256':{'combined description':'ALASKA AIRLINES INC.', 'USDA description':'ALASKA AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3257':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3258':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3259':{'combined description':'AMERICAN TRANS AIR', 'USDA description':'AMERICAN TRANS AIR','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3260':{'combined description':'SPIRIT AIRLINES', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3261':{'combined description':'AIR CHINA', 'USDA description':'AIR CHINA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3262':{'combined description':'RENO AIR', 'USDA description':'RENO AIR, INC.','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3263':{'combined description':'AERO SERVICIO CARABOBO - ASERCA', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3264':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3265':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3266':{'combined description':'AIR SEYCHELLES', 'USDA description':'AIR SEYCHELLES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3267':{'combined description':'AIR PANAMA INTERNATIONAL', 'USDA description':'AIR PANAMA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3268':{'combined description':'AIR PACIFIC', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3269':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3270':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3271':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3272':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3273':{'combined description':'RICA HOTELS', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3274':{'combined description':'INTER NOR HOTELS', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3275':{'combined description':'AIR NEVADA', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3276':{'combined description':'AIR MIDWEST', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3277':{'combined description':'AIR MADAGASCAR', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3278':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3279':{'combined description':'AIR LA', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3280':{'combined description':'AIR JAMAICA', 'USDA description':'AIR JAMAICA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3281':{'combined description':'AIR DJIBOUTI', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3282':{'combined description':'AIR DJIBOUTI', 'USDA description':'AIR DJIBOUTI','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3283':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3284':{'combined description':'AERO VIRGIN ISLANDS', 'USDA description':'AERO VIRGIN ISLANDS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3285':{'combined description':'AERO PERU', 'USDA description':'AERO PERU','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3286':{'combined description':'AERO NICARAGUENSIS', 'USDA description':'AEROLINEAS NICARAGUENSIS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3287':{'combined description':'AERO COACH AVIATION', 'USDA description':'AERO COACH AVAIATION','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3288':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3289':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3290':{'combined description':'airlines', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3291':{'combined description':'ARIANA AFGHAN', 'USDA description':'ARIANA AFGHAN','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3292':{'combined description':'CYPRUS AIRWAYS', 'USDA description':'CYPRUS AIRWAYS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3293':{'combined description':'EQUATORIANA', 'USDA description':'ECUATORIANA','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3294':{'combined description':'ETHIOPIAN AIRLINES', 'USDA description':'ETHIOPIAN AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3295':{'combined description':'KENYA AIRWAYS', 'USDA description':'KENYA AIRLINES','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3296':{'combined description':'AIR BERLIN - AIRBERLIN', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3297':{'combined description':'TAROM ROMANIAN AIR TRANSPORT', 'USDA description':'','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3298':{'combined description':'AIR MAURITIUS', 'USDA description':'AIR MAURITIUS','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3299':{'combined description':'WIDEROE\'S FLYVESELSKAP', 'USDA description':'WIDERO\'S FLYVESELSKAP','IRS Description':'Airlines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3351':{'combined description':'AFFILIATED AUTO RENTAL', 'USDA description':'AFFILIATED AUTO RENTAL','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3352':{'combined description':'AMERICAN INTL RENT-A-CAR', 'USDA description':'AMERICAN INTL RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3353':{'combined description':'BROOKS RENT-A-CAR', 'USDA description':'BROOKS RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3354':{'combined description':'ACTION AUTO RENTAL', 'USDA description':'ACTION AUTO RENTAL','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3355':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3356':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3357':{'combined description':'HERTZ RENT-A-CAR', 'USDA description':'HERTZ RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3358':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3359':{'combined description':'PAYLESS CAR RENTAL', 'USDA description':'PAYLESS CAR RENTAL','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3360':{'combined description':'SNAPPY CAR RENTAL', 'USDA description':'SNAPPY CAR RENTAL','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3361':{'combined description':'AIRWAYS RENT-A-CAR', 'USDA description':'AIRWAYS RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3362':{'combined description':'ALTRA AUTO RENTAL', 'USDA description':'ALTRA AUTO RENTAL','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3363':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3364':{'combined description':'AGENCY RENT-A-CAR', 'USDA description':'AGENCY RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3365':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3366':{'combined description':'BUDGET RENT-A-CAR', 'USDA description':'BUDGET RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3367':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3368':{'combined description':'HOLIDAY RENT-A-WRECK', 'USDA description':'HOLIDAY RENT-A-WRECK','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3369':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3370':{'combined description':'RENT-A-WRECK', 'USDA description':'RENT-A-WRECK','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3371':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3372':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3373':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3374':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3375':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3376':{'combined description':'AJAX RENT-A-CAR', 'USDA description':'AJAX RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3377':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3378':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3379':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3380':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3381':{'combined description':'EUROP CAR', 'USDA description':'EUROP CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3382':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3383':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3384':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3385':{'combined description':'TROPICAL RENT-A-CAR', 'USDA description':'TROPICAL RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3386':{'combined description':'SHOWCASE RENTAL CARS', 'USDA description':'SHOWCASE RENTAL CARS','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3387':{'combined description':'ALAMO RENT-A-CAR', 'USDA description':'ALAMO RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3388':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3389':{'combined description':'AVIS RENT-A-CAR', 'USDA description':'AVIS RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3390':{'combined description':'DOLLAR RENT-A-CAR', 'USDA description':'DOLLAR RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3391':{'combined description':'EUROPE BY CAR', 'USDA description':'EUROPE BY CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3392':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3393':{'combined description':'NATIONAL CAR RENTAL', 'USDA description':'NATIONAL CAR RENTAL','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3394':{'combined description':'KEMWELL GROUP RENT-A-CAR', 'USDA description':'KEMWELL GROUP RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3395':{'combined description':'THRIFTY RENT-A-CAR', 'USDA description':'THRIFTY RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3396':{'combined description':'TILDEN TENT-A-CAR', 'USDA description':'TILDEN TENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3397':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3398':{'combined description':'ECONO-CAR RENT-A-CAR', 'USDA description':'ECONO-CAR RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3399':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3400':{'combined description':'AUTO HOST COST CAR RENTALS', 'USDA description':'AUTO HOST COST CAR RENTALS','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3401':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3402':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3403':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3404':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3405':{'combined description':'ENTERPRISE RENT-A-CAR', 'USDA description':'ENTERPRISE RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3406':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3407':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3408':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3409':{'combined description':'GENERAL RENT-A-CAR', 'USDA description':'GENERAL RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3410':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3411':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3412':{'combined description':'A-1 RENT-A-CAR', 'USDA description':'A-1 RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3413':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3414':{'combined description':'GODFREY NATL RENT-A-CAR', 'USDA description':'GODFREY NATL RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3415':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3416':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3417':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3418':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3419':{'combined description':'ALPHA RENT-A-CAR', 'USDA description':'ALPHA RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3420':{'combined description':'ANSA INTL RENT-A-CAR', 'USDA description':'ANSA INTL RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3421':{'combined description':'ALLSTAE RENT-A-CAR', 'USDA description':'ALLSTAE RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3422':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3423':{'combined description':'AVCAR RENT-A-CAR', 'USDA description':'AVCAR RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3424':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3425':{'combined description':'AUTOMATE RENT-A-CAR', 'USDA description':'AUTOMATE RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3426':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3427':{'combined description':'AVON RENT-A-CAR', 'USDA description':'AVON RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3428':{'combined description':'CAREY RENT-A-CAR', 'USDA description':'CAREY RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3429':{'combined description':'INSURANCE RENT-A-CAR', 'USDA description':'INSURANCE RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3430':{'combined description':'MAJOR RENT-A-CAR', 'USDA description':'MAJOR RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3431':{'combined description':'REPLACEMENT RENT-A-CAR', 'USDA description':'REPLACEMENT RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3432':{'combined description':'RESERVE RENT-A-CAR', 'USDA description':'RESERVE RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3433':{'combined description':'UGLY DUCKLING RENT-A-CAR', 'USDA description':'UGLY DUCKLING RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3434':{'combined description':'USA RENT-A-CAR', 'USDA description':'USA RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3435':{'combined description':'VALUE RENT-A-CAR', 'USDA description':'VALUE RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3436':{'combined description':'AUTOHANSA RENT-A-CAR', 'USDA description':'AUTOHANSA RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3437':{'combined description':'CITE RENT-A-CAR', 'USDA description':'CITE RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3438':{'combined description':'INTERENT RENT-A-CAR', 'USDA description':'INTERENT RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3439':{'combined description':'MILLEVILLE RENT-A-CAR', 'USDA description':'MILLEVILLE RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3440':{'combined description':'VIA ROUTE RENT-A-CAR', 'USDA description':'VIA ROUTE RENT-A-CAR','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3441':{'combined description':'Car Rental', 'USDA description':'','IRS Description':'Car Rental', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3501':{'combined description':'HOLIDAY INNS, HOLIDAY INN EXPRESS', 'USDA description':'HOLIDAY INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3502':{'combined description':'BEST WESTERN HOTELS', 'USDA description':'BEST WESTERN HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3503':{'combined description':'SHERATON HOTELS', 'USDA description':'SHERATON HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3504':{'combined description':'HILTON HOTELS', 'USDA description':'HILTON HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3505':{'combined description':'FORTE HOTELS', 'USDA description':'FORTE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3506':{'combined description':'GOLDEN TULIP HOTELS', 'USDA description':'GOLDEN TULIP HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3507':{'combined description':'FRIENDSHIP INNS', 'USDA description':'FRIENDSHIP INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3508':{'combined description':'QUALITY INNS, QUALITY SUITES', 'USDA description':'QUALITY INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3509':{'combined description':'MARRIOTT HOTELS', 'USDA description':'MARRIOTT HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3510':{'combined description':'DAYS INN, DAYSTOP', 'USDA description':'DAYS INN','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3511':{'combined description':'ARABELLA HOTELS', 'USDA description':'ARABELLA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3512':{'combined description':'INTER-CONTINENTAL HOTELS', 'USDA description':'INTER-CONTINENTAL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3513':{'combined description':'WESTIN HOTELS', 'USDA description':'WESTIN HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3514':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3515':{'combined description':'RODEWAY INNS', 'USDA description':'RODEWAY INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3516':{'combined description':'LA QUINTA MOTOR INNS', 'USDA description':'LA QUINTA MOTOR INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3517':{'combined description':'AMERICANA HOTELS', 'USDA description':'AMERICANA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3518':{'combined description':'SOL HOTELS', 'USDA description':'SOL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3519':{'combined description':'PULLMAN INTERNATIONAL HOTELS', 'USDA description':'PULLMAN INTERNATIONAL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3520':{'combined description':'MERIDIEN HOTELS', 'USDA description':'MERIDIEN HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3521':{'combined description':'CREST HOTELS (see FORTE HOTELS)', 'USDA description':'CREST HOTELS (see FORTE HOTELS)','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3522':{'combined description':'TOKYO HOTEL', 'USDA description':'TOKYO HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3523':{'combined description':'PENNSULA HOTEL', 'USDA description':'PENNSULA HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3524':{'combined description':'WELCOMGROUP HOTELS', 'USDA description':'WELCOMGROUP HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3525':{'combined description':'DUNFEY HOTELS', 'USDA description':'DUNFEY HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3526':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3527':{'combined description':'DOWNTOWNER-PASSPORT HOTEL', 'USDA description':'DOWNTOWNER-PASSPORT HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3528':{'combined description':'RED LION HOTELS, RED LION INNS', 'USDA description':'RED LION HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3529':{'combined description':'CP HOTELS', 'USDA description':'CP HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3530':{'combined description':'RENAISSANCE HOTELS, STOUFFER HOTELS', 'USDA description':'RENAISSANCE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3531':{'combined description':'ASTIR HOTELS', 'USDA description':'ASTIR HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3532':{'combined description':'SUN ROUTE HOTELS', 'USDA description':'SUN ROUTE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3533':{'combined description':'HOTEL IBIS', 'USDA description':'HOTEL IBIS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3534':{'combined description':'SOUTHERN PACIFIC HOTELS', 'USDA description':'SOUTHERN PACIFIC HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3535':{'combined description':'HILTON INTERNATIONAL', 'USDA description':'HILTON INTERNATIONAL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3536':{'combined description':'AMFAC HOTELS', 'USDA description':'AMFAC HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3537':{'combined description':'ANA HOTEL', 'USDA description':'ANA HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3538':{'combined description':'CONCORDE HOTELS', 'USDA description':'CONCORDE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3539':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3540':{'combined description':'IBEROTEL HOTELS', 'USDA description':'IBEROTEL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3541':{'combined description':'HOTEL OKURA', 'USDA description':'HOTEL OKURA','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3542':{'combined description':'ROYAL HOTELS', 'USDA description':'ROYAL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3543':{'combined description':'FOUR SEASONS HOTELS', 'USDA description':'FOUR SEASONS HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3544':{'combined description':'CIGA HOTELS', 'USDA description':'CIGA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3545':{'combined description':'SHANGRI-LA INTERNATIONAL', 'USDA description':'SHANGRI-LA INTERNATIONAL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3546':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3547':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3548':{'combined description':'HOTELES MELIA', 'USDA description':'HOTELES MELIA','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3549':{'combined description':'AUBERGE DES GOVERNEURS', 'USDA description':'AUBERGE DES GOVERNEURS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3550':{'combined description':'REGAL 8 INNS', 'USDA description':'REGAL 8 INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3551':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3552':{'combined description':'COAST HOTELS', 'USDA description':'COAST HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3553':{'combined description':'PARK INNS INTERNATIONAL', 'USDA description':'PARK INNS INTERNATIONAL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3554':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3555':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3556':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3557':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3558':{'combined description':'JOLLY HOTELS', 'USDA description':'JOLLY HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3559':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3560':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3561':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3562':{'combined description':'COMFORT INNS', 'USDA description':'COMFORT INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3563':{'combined description':'JOURNEY\'S END MOTLS', 'USDA description':'JOURNEY\'S END MOTLS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3564':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3565':{'combined description':'RELAX INNS', 'USDA description':'RELAX INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3566':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3567':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3568':{'combined description':'LADBROKE HOTELS', 'USDA description':'LADBROKE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3569':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3570':{'combined description':'FORUM HOTELS', 'USDA description':'FORUM HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3571':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3572':{'combined description':'MIYAKO HOTELS', 'USDA description':'MIYAKO HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3573':{'combined description':'SANDMAN HOTELS', 'USDA description':'SANDMAN HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3574':{'combined description':'VENTURE INNS', 'USDA description':'VENTURE INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3575':{'combined description':'VAGABOND HOTELS', 'USDA description':'VAGABOND HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3576':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3577':{'combined description':'MANDARIN ORIENTAL HOTEL', 'USDA description':'MANDARIN ORIENTAL HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3578':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3579':{'combined description':'HOTEL MERCURE', 'USDA description':'HOTEL MERCURE','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3580':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3581':{'combined description':'DELTA HOTEL', 'USDA description':'DELTA HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3582':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3583':{'combined description':'SAS HOTELS', 'USDA description':'SAS HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3584':{'combined description':'PRINCESS HOTELS INTERNATIONAL', 'USDA description':'PRINCESS HOTELS INTERNATIONAL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3585':{'combined description':'HUNGAR HOTELS', 'USDA description':'HUNGAR HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3586':{'combined description':'SOKOS HOTELS', 'USDA description':'SOKOS HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3587':{'combined description':'DORAL HOTELS', 'USDA description':'DORAL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3588':{'combined description':'HELMSLEY HOTELS', 'USDA description':'HELMSLEY HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3589':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3590':{'combined description':'FAIRMONT HOTELS', 'USDA description':'FAIRMONT HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3591':{'combined description':'SONESTA HOTELS', 'USDA description':'SONESTA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3592':{'combined description':'OMNI HOTELS', 'USDA description':'OMNI HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3593':{'combined description':'CUNARD HOTELS', 'USDA description':'CUNARD HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3594':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3595':{'combined description':'HOSPITALITY INTERNATIONAL', 'USDA description':'HOSPITALITY INTERNATIONAL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3596':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3597':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3598':{'combined description':'REGENT INTERNATIONAL HOTELS', 'USDA description':'REGENT INTERNATIONAL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3599':{'combined description':'PANNONIA HOTELS', 'USDA description':'PANNONIA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3600':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3601':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3602':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3603':{'combined description':'NOAH\'S HOTELS', 'USDA description':'NOAH\'S HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3604':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3605':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3606':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3607':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3608':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3609':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3610':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3611':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3612':{'combined description':'MOVENPICK HOTELS', 'USDA description':'MOVENPICK HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3613':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3614':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3615':{'combined description':'TRAVELODGE', 'USDA description':'TRAVELODGE','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3616':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3617':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3618':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3619':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3620':{'combined description':'TELFORD INTERNATIONAL', 'USDA description':'TELFORD INTERNATIONAL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3621':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3622':{'combined description':'MERLIN HOTELS', 'USDA description':'MERLIN HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3623':{'combined description':'DORINT HOTELS', 'USDA description':'DORINT HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3624':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3625':{'combined description':'HOTLE UNIVERSALE', 'USDA description':'HOTLE UNIVERSALE','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3626':{'combined description':'PRINCE HOTELS', 'USDA description':'PRINCE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3627':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3628':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3629':{'combined description':'DAN HOTELS', 'USDA description':'DAN HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3630':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3631':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3632':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3633':{'combined description':'RANK HOTELS', 'USDA description':'RANK HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3634':{'combined description':'SWISSOTEL', 'USDA description':'SWISSOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3635':{'combined description':'RESO HOTELS', 'USDA description':'RESO HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3636':{'combined description':'SAROVA HOTELS', 'USDA description':'SAROVA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3637':{'combined description':'RAMADA INNS, RAMADA LIMITED', 'USDA description':'RAMADA INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3638':{'combined description':'HO JO INN, HOWARD JOHNSON', 'USDA description':'HO JO INN','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3639':{'combined description':'MOUNT CHARLOTTE THISTLE', 'USDA description':'MOUNT CHARLOTTE THISTLE','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3640':{'combined description':'HYATT HOTEL', 'USDA description':'HYATT HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3641':{'combined description':'SOFITEL HOTELS', 'USDA description':'SOFITEL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3642':{'combined description':'NOVOTEL HOTELS', 'USDA description':'NOVOTEL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3643':{'combined description':'STEIGENBERGER HOTELS', 'USDA description':'STEIGENBERGER HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3644':{'combined description':'ECONO LODGES', 'USDA description':'ECONO LODGES','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3645':{'combined description':'QUEENS MOAT HOUSES', 'USDA description':'QUEENS MOAT HOUSES','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3646':{'combined description':'SWALLOW HOTELS', 'USDA description':'SWALLOW HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3647':{'combined description':'HUSA HOTELS', 'USDA description':'HUSA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3648':{'combined description':'DE VERE HOTELS', 'USDA description':'DE VERE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3649':{'combined description':'RADISSON HOTELS', 'USDA description':'RADISSON HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3650':{'combined description':'RED ROOK INNS', 'USDA description':'RED ROOK INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3651':{'combined description':'IMPERIAL LONDON HOTEL', 'USDA description':'IMPERIAL LONDON HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3652':{'combined description':'EMBASSY HOTELS', 'USDA description':'EMBASSY HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3653':{'combined description':'PENTA HOTELS', 'USDA description':'PENTA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3654':{'combined description':'LOEWS HOTELS', 'USDA description':'LOEWS HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3655':{'combined description':'SCANDIC HOTELS', 'USDA description':'SCANDIC HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3656':{'combined description':'SARA HOTELS', 'USDA description':'SARA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3657':{'combined description':'OBEROI HOTELS', 'USDA description':'OBEROI HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3658':{'combined description':'OTANI HOTELS', 'USDA description':'OTANI HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3659':{'combined description':'TAJ HOTELS INTERNATIONAL', 'USDA description':'TAJ HOTELS INTERNATIONAL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3660':{'combined description':'KNIGHTS INNS', 'USDA description':'KNIGHTS INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3661':{'combined description':'METROPOLE HOTELS', 'USDA description':'METROPOLE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3662':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3663':{'combined description':'HOTELES EL PRESIDENTS', 'USDA description':'HOTELES EL PRESIDENTS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3664':{'combined description':'FLAG INN', 'USDA description':'FLAG INN','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3665':{'combined description':'HAMPTON INNS', 'USDA description':'HAMPTON INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3666':{'combined description':'STAKIS HOTELS', 'USDA description':'STAKIS HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3667':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3668':{'combined description':'MARITIM HOTELS', 'USDA description':'MARITIM HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3669':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3670':{'combined description':'ARCARD HOTELS', 'USDA description':'ARCARD HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3671':{'combined description':'ARCTIA HOTELS', 'USDA description':'ARCTIA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3672':{'combined description':'CAMPANIEL HOTELS', 'USDA description':'CAMPANIEL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3673':{'combined description':'IBUSZ HOTELS', 'USDA description':'IBUSZ HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3674':{'combined description':'RANTASIPI HOTELS', 'USDA description':'RANTASIPI HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3675':{'combined description':'INTERHOTEL CEDOK', 'USDA description':'INTERHOTEL CEDOK','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3676':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3677':{'combined description':'CLIMAT DE FRANCE HOTELS', 'USDA description':'CLIMAT DE FRANCE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3678':{'combined description':'CUMULUS HOTELS', 'USDA description':'CUMULUS HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3679':{'combined description':'DANUBIUS HOTEL', 'USDA description':'DANUBIUS HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3680':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3681':{'combined description':'ADAMS MARK HOTELS', 'USDA description':'ADAMS MARK HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3682':{'combined description':'ALLSTAR INNS', 'USDA description':'ALLSTAR INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3683':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3684':{'combined description':'BUDGET HOST INNS', 'USDA description':'BUDGET HOST INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3685':{'combined description':'BUDGETEL HOTELS', 'USDA description':'BUDGETEL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3686':{'combined description':'SUISSE CHALETS', 'USDA description':'SUISSE CHALETS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3687':{'combined description':'CLARION HOTELS', 'USDA description':'CLARION HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3688':{'combined description':'COMPRI HOTELS', 'USDA description':'COMPRI HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3689':{'combined description':'CONSORT HOTELS', 'USDA description':'CONSORT HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3690':{'combined description':'COURTYARD BY MARRIOTT', 'USDA description':'COURTYARD BY MARRIOTT','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3691':{'combined description':'DILLION INNS', 'USDA description':'DILLION INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3692':{'combined description':'DOUBLETREE HOTELS', 'USDA description':'DOUBLETREE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3693':{'combined description':'DRURY INNS', 'USDA description':'DRURY INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3694':{'combined description':'ECONOMY INNS OF AMERICA', 'USDA description':'ECONOMY INNS OF AMERICA','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3695':{'combined description':'EMBASSY SUITES', 'USDA description':'EMBASSY SUITES','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3696':{'combined description':'EXEL INNS', 'USDA description':'EXEL INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3697':{'combined description':'FARFIELD HOTELS', 'USDA description':'FARFIELD HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3698':{'combined description':'HARLEY HOTELS', 'USDA description':'HARLEY HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3699':{'combined description':'MIDWAY MOTOR LODGE', 'USDA description':'MIDWAY MOTOR LODGE','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3700':{'combined description':'MOTEL 6', 'USDA description':'MOTEL 6','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3701':{'combined description':'GUEST QUARTERS (Formally PICKETT SUITE HOTELS)', 'USDA description':'GUEST QUARTERS (Formally PICKETT SUITE HOTELS)','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3702':{'combined description':'THE REGISTRY HOTELS', 'USDA description':'THE REGISTRY HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3703':{'combined description':'RESIDENCE INNS', 'USDA description':'RESIDENCE INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3704':{'combined description':'ROYCE HOTELS', 'USDA description':'ROYCE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3705':{'combined description':'SANDMAN INNS', 'USDA description':'SANDMAN INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3706':{'combined description':'SHILO INNS', 'USDA description':'SHILO INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3707':{'combined description':'SHONEY\'S INNS', 'USDA description':'SHONEY\'S INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3708':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3709':{'combined description':'SUPER8 MOTELS', 'USDA description':'SUPER8 MOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3710':{'combined description':'THE RITZ CARLTON HOTELS', 'USDA description':'THE RITZ CARLTON HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3711':{'combined description':'FLAG INNS (AUSRALIA)', 'USDA description':'FLAG INNS (AUSRALIA)','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3712':{'combined description':'GOLDEN CHAIN HOTEL', 'USDA description':'GOLDEN CHAIN HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3713':{'combined description':'QUALITY PACIFIC HOTEL', 'USDA description':'QUALITY PACIFIC HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3714':{'combined description':'FOUR SEASONS HOTEL (AUSTRALIA)', 'USDA description':'FOUR SEASONS HOTEL (AUSTRALIA)','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3715':{'combined description':'FARIFIELD INN', 'USDA description':'FARIFIELD INN','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3716':{'combined description':'CARLTON HOTELS', 'USDA description':'CARLTON HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3717':{'combined description':'CITY LODGE HOTELS', 'USDA description':'CITY LODGE HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3718':{'combined description':'KAROS HOTELS', 'USDA description':'KAROS HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3719':{'combined description':'PROTEA HOTELS', 'USDA description':'PROTEA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3720':{'combined description':'SOUTHERN SUN HOTELS', 'USDA description':'SOUTHERN SUN HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3721':{'combined description':'HILTON CONRAD', 'USDA description':'HILTON CONRAD','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3722':{'combined description':'WYNDHAM HOTEL AND RESORTS', 'USDA description':'WYNDHAM HOTEL AND RESORTS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3723':{'combined description':'RICA HOTELS', 'USDA description':'RICA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3724':{'combined description':'INER NOR HOTELS', 'USDA description':'INER NOR HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3725':{'combined description':'SEAINES PLANATION', 'USDA description':'SEAINES PLANATION','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3726':{'combined description':'RIO SUITES', 'USDA description':'RIO SUITES','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3727':{'combined description':'BROADMOOR HOTEL', 'USDA description':'BROADMOOR HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3728':{'combined description':'BALLY\'S HOTEL AND CASINO', 'USDA description':'BALLY\'S HOTEL AND CASINO','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3729':{'combined description':'JOHN ASCUAGA\'S NUGGET', 'USDA description':'JOHN ASCUAGA\'S NUGGET','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3730':{'combined description':'MGM GRAND HOTEL', 'USDA description':'MGM GRAND HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3731':{'combined description':'HARRAH\'S HOTELS AND CASINOS', 'USDA description':'HARRAH\'S HOTELS AND CASINOS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3732':{'combined description':'OPRYLAND HOTEL', 'USDA description':'OPRYLAND HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3733':{'combined description':'BOCA RATON RESORT', 'USDA description':'BOCA RATON RESORT','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3734':{'combined description':'HARVEY/BRISTOL HOTELS', 'USDA description':'HARVEY/BRISTOL HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3735':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3736':{'combined description':'COLORADO BELLE/EDGEWATER RESORT', 'USDA description':'COLORADO BELLE/EDGEWATER RESORT','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3737':{'combined description':'RIVIERA HOTEL AND CASINO', 'USDA description':'RIVIERA HOTEL AND CASINO','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3738':{'combined description':'TROPICANA RESORT AND CASINO', 'USDA description':'TROPICANA RESORT AND CASINO','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3739':{'combined description':'WOODSIDE HOTELS AND RESORTS', 'USDA description':'WOODSIDE HOTELS AND RESORTS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3740':{'combined description':'TOWNPLACE SUITES', 'USDA description':'TOWNPLACE SUITES','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3741':{'combined description':'MILLENIUM BROADWAY HOTEL', 'USDA description':'MILLENIUM BROADWAY HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3742':{'combined description':'CLUB MED', 'USDA description':'CLUB MED','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3743':{'combined description':'BILTMORE HOTEL AND SUITES', 'USDA description':'BILTMORE HOTEL AND SUITES','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3744':{'combined description':'CAREFREE RESORTS', 'USDA description':'CAREFREE RESORTS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3745':{'combined description':'ST. REGIS HOTEL', 'USDA description':'ST. REGIS HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3746':{'combined description':'THE ELIOT HOTEL', 'USDA description':'THE ELIOT HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3747':{'combined description':'CLUBCORP/CLUB RESORTS', 'USDA description':'CLUBCORP/CLUB RESORTS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3748':{'combined description':'WELESLEY INNS', 'USDA description':'WELESLEY INNS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3749':{'combined description':'THE BEVERLY HILLS HOTEL', 'USDA description':'THE BEVERLY HILLS HOTEL','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3750':{'combined description':'CROWNE PLAZA HOTELS', 'USDA description':'CROWNE PLAZA HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3751':{'combined description':'HOMEWOOD SUITES', 'USDA description':'HOMEWOOD SUITES','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3752':{'combined description':'PEABODY HOTELS', 'USDA description':'PEABODY HOTELS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3753':{'combined description':'GREENBRIAH RESORTS', 'USDA description':'GREENBRIAH RESORTS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3754':{'combined description':'AMELIA ISLAND PLANATION', 'USDA description':'AMELIA ISLAND PLANATION','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3755':{'combined description':'THE HOMESTEAD', 'USDA description':'THE HOMESTEAD','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3756':{'combined description':'SOUTH SEAS RESORTS', 'USDA description':'SOUTH SEAS RESORTS','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3757':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3758':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3759':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3760':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3761':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3762':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3763':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3764':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3765':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3766':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3767':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3768':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3769':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3770':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3771':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3772':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3773':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3774':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3775':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3776':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3777':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3778':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3779':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3780':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3781':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3782':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3783':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3784':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3785':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3786':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3787':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3788':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3789':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3790':{'combined description':'Hotels/Motels/Inns/Resorts', 'USDA description':'','IRS Description':'Hotels/Motels/Inns/Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '3835':{'combined description':'* MASTERS ECONOMY INNS', 'USDA description':'* MASTERS ECONOMY INNS','IRS Description':'', 'Reportable under 6041/6041A and Authority for Exception':''}, '4011':{'combined description':'Railroads', 'USDA description':'','IRS Description':'Railroads', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '4111':{'combined description':'Local/Suburban Commuter Passenger Transportation & Railroads, Feries, Local Water Transportation.', 'USDA description':'Local/Suburban Commuter Passenger Transportation & Railroads, Feries, Local Water Transportation.','IRS Description':'Commuter Transport, Ferries', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4112':{'combined description':'Passenger Railways', 'USDA description':'Passenger Railways','IRS Description':'Passenger Railways', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4119':{'combined description':'Ambulance Services', 'USDA description':'Ambulance Services','IRS Description':'Ambulance Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4121':{'combined description':'Taxicabs and Limousines', 'USDA description':'Taxicabs and Limousines','IRS Description':'Taxicabs/Limousines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4131':{'combined description':'Bus Lines, Including Charters, Tour Buses', 'USDA description':'Bus Lines, Including Charters, Tour Buses','IRS Description':'Bus Lines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4214':{'combined description':'Motor Freight Carriers, Moving and Storage Companies, Trucking & Local/Long Distance, Delivery Services & Local', 'USDA description':'Motor Freight Carriers','IRS Description':'Motor Freight Carriers and Trucking - Local and Long Distance, Moving and Storage Companies, and Local Delivery Services ', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '4215':{'combined description':'Courier Services & Air or Ground, Freight forwarders', 'USDA description':'Courier Services & Air or Ground','IRS Description':'Courier Services ', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4225':{'combined description':'Public warehousing, Storage', 'USDA description':'Warehousing, Public','IRS Description':'Public Warehousing and Storage - Farm Products, Refrigerated Goods, Household Goods, and Storage ', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '4411':{'combined description':'Cruise and Steamship Lines', 'USDA description':'Cruise Lines','IRS Description':'Cruise Lines', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4457':{'combined description':'Boat Rentals and Leases', 'USDA description':'Boat Rentals and Leases','IRS Description':'Boat Rentals and Leases', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4468':{'combined description':'Marinas, Marine Service, and Supplies', 'USDA description':'Marinas, Marine Service, and Supplies','IRS Description':'Marinas, Service and Supplies', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4511':{'combined description':'Airlines, Air Carriers ( not listed elsewhere)', 'USDA description':'Airlines, Air Carriers ( not listed elsewhere)','IRS Description':'Airlines, Air Carriers', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4582':{'combined description':'Airports, Airport Terminals, Flying Fields', 'USDA description':'Airports, Airport Terminals','IRS Description':'Airports, Flying Fields', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4722':{'combined description':'Travel Agencies and Tour Operations', 'USDA description':'Travel Agencies and Tour Operations','IRS Description':'Travel Agencies, Tour Operators', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4723':{'combined description':'Package Tour Operators (For use in Germany only)', 'USDA description':'Package Tour Operators (For use in Germany only)','IRS Description':'TUI Travel - Germany', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4784':{'combined description':'Toll and Bridge Fees', 'USDA description':'Toll and Bridge Fees','IRS Description':'Tolls/Bridge Fees', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '4789':{'combined description':'Transportation Services, Not elsewhere classified)', 'USDA description':'Transportation Services, Not elsewhere classified)','IRS Description':'Transportation Services (Not Elsewhere Classified)', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '4812':{'combined description':'Telecommunications Equipment including telephone sales', 'USDA description':'Telecommunications Equipment including telephone sales','IRS Description':'Telecommunication Equipment and Telephone Sales', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '4814':{'combined description':'Fax services, Telecommunication Services', 'USDA description':'Fax services','IRS Description':'Telecommunication Services', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '4815':{'combined description':'VisaPhone', 'USDA description':'VisaPhone','IRS Description':'', 'Reportable under 6041/6041A and Authority for Exception':''}, '4816':{'combined description':'Computer Network Services', 'USDA description':'','IRS Description':'Computer Network Services', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '4821':{'combined description':'Telegraph services', 'USDA description':'Telegraph services','IRS Description':'Telegraph Services', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '4829':{'combined description':'Money Orders & Wire Transfer', 'USDA description':'Money Orders & Wire Transfer','IRS Description':'Wires, Money Orders', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '4899':{'combined description':'Cable and other pay television (previously Cable Services)', 'USDA description':'Cable and other pay television (previously Cable Services)','IRS Description':'Cable, Satellite, and Other Pay Television and Radio', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '4900':{'combined description':'Electric, Gas, Sanitary and Water Utilities', 'USDA description':'Electric, Gas, Sanitary and Water Utilities','IRS Description':'Utilities ', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5013':{'combined description':'Motor vehicle supplies and new parts', 'USDA description':'Motor vehicle supplies and new parts','IRS Description':'Motor Vehicle Supplies and New Parts', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5021':{'combined description':'Office and Commercial Furniture', 'USDA description':'Office and Commercial Furniture','IRS Description':'Office and Commercial Furniture', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5039':{'combined description':'Construction Materials, Not Elsewhere Classified', 'USDA description':'Construction Materials, Not Elsewhere Classified','IRS Description':'Construction Materials (Not Elsewhere Classified)', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5044':{'combined description':'Office, Photographic, Photocopy, and Microfilm Equipment', 'USDA description':'Office, Photographic, Photocopy, and Microfilm Equipment','IRS Description':'Photographic, Photocopy, Microfilm Equipment, and Supplies', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5045':{'combined description':'Computers, Computer Peripheral Equipment, Software', 'USDA description':'Computers, Computer Peripheral Equipment, Software','IRS Description':'Computers, Peripherals, and Software', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5046':{'combined description':'Commercial Equipment, Not Elsewhere Classified', 'USDA description':'Commercial Equipment, Not Elsewhere Classified','IRS Description':'Commercial Equipment (Not Elsewhere Classified)', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5047':{'combined description':'Medical, Dental Ophthalmic, Hospital Equipment and Supplies', 'USDA description':'Medical, Dental Ophthalmic, Hospital Equipment and Supplies','IRS Description':'Medical, Dental, Ophthalmic, and Hospital Equipment and Supplies', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5051':{'combined description':'Metal Service Centers and Offices', 'USDA description':'Metal Service Centers and Offices','IRS Description':'Metal Service Centers', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5065':{'combined description':'Electrical Parts and Equipment', 'USDA description':'Electrical Parts and Equipment','IRS Description':'Electrical Parts and Equipment', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5072':{'combined description':'Hardware Equipment and Supplies', 'USDA description':'Hardware Equipment and Supplies','IRS Description':'Hardware, Equipment, and Supplies', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5074':{'combined description':'Plumbing and Heating Equipment and Supplies', 'USDA description':'Plumbing and Heating Equipment and Supplies','IRS Description':'Plumbing, Heating Equipment, and Supplies', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5085':{'combined description':'Industrial Supplies, Not Elsewhere Classified', 'USDA description':'Industrial Supplies, Not Elsewhere Classified','IRS Description':'Industrial Supplies (Not Elsewhere Classified)', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5094':{'combined description':'Precious Stones and Metals, Watches and Jewelry', 'USDA description':'Precious Stones and Metals, Watches and Jewelry','IRS Description':'Precious Stones and Metals, Watches and Jewelry', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5099':{'combined description':'Durable Goods, Not Elsewhere Classified', 'USDA description':'Durable Goods, Not Elsewhere Classified','IRS Description':'Durable Goods (Not Elsewhere Classified)', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5111':{'combined description':'Stationery, Office Supplies, Printing, and Writing Paper', 'USDA description':'Stationery, Office Supplies, Printing, and Writing Paper','IRS Description':'Stationary, Office Supplies, Printing and Writing Paper', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5122':{'combined description':'Drugs, Drug Proprietors, and Druggist\'s Sundries', 'USDA description':'Drugs, Drug Proprietors, and Druggist\'s Sundries','IRS Description':'Drugs, Drug Proprietaries, and Druggist Sundries', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5131':{'combined description':'Piece Goods, Notions, and Other Dry Goods', 'USDA description':'Piece Goods, Notions, and Other Dry Goods','IRS Description':'Piece Goods, Notions, and Other Dry Goods', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5137':{'combined description':'Men\'s Women\'s and Children\'s Uniforms and Commercial Clothing', 'USDA description':'Men\'s Women\'s and Children\'s Uniforms and Commercial Clothing','IRS Description':'Uniforms, Commercial Clothing', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5139':{'combined description':'Commercial Footwear', 'USDA description':'Commercial Footwear','IRS Description':'Commercial Footwear', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5169':{'combined description':'Chemicals and Allied Products, Not Elsewhere Classified', 'USDA description':'Chemicals and Allied Products, Not Elsewhere Classified','IRS Description':'Chemicals and Allied Products (Not Elsewhere Classified)', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5172':{'combined description':'Petroleum and Petroleum Products', 'USDA description':'Petroleum and Petroleum Products','IRS Description':'Petroleum and Petroleum Products', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5192':{'combined description':'Books, Periodicals, and Newspapers', 'USDA description':'Books, Periodicals, and Newspapers','IRS Description':'Books, Periodicals, and Newspapers', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5193':{'combined description':'Florists\' Supplies, Nursery Stock and Flowers', 'USDA description':'Florists\' Supplies, Nursery Stock and Flowers','IRS Description':'Florists Supplies, Nursery Stock, and Flowers', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5198':{'combined description':'Paints, Varnishes, and Supplies', 'USDA description':'Paints, Varnishes, and Supplies','IRS Description':'Paints, Varnishes, and Supplies', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5199':{'combined description':'Non-durable Goods, Not Elsewhere Classified', 'USDA description':'Non-durable Goods, Not Elsewhere Classified','IRS Description':'Nondurable Goods (Not Elsewhere Classified)', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5200':{'combined description':'Home Supply Warehouse Stores', 'USDA description':'Home Supply Warehouse Stores','IRS Description':'Home Supply Warehouse Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5211':{'combined description':'Lumber and Building Materials Stores', 'USDA description':'Lumber and Building Materials Stores','IRS Description':'Lumber, Building Materials Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5231':{'combined description':'Glass, Paint, and Wallpaper Stores', 'USDA description':'Wallpaper Stores','IRS Description':'Glass, Paint, and Wallpaper Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5251':{'combined description':'Hardware Stores', 'USDA description':'Hardware Stores','IRS Description':'Hardware Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5261':{'combined description':'Nurseries & Lawn and Garden Supply Store', 'USDA description':'Nurseries & Lawn and Garden Supply Store','IRS Description':'Nurseries, Lawn and Garden Supply Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5271':{'combined description':'Mobile Home Dealers', 'USDA description':'Mobile Home Dealers','IRS Description':'Mobile Home Dealers', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5300':{'combined description':'Wholesale Clubs', 'USDA description':'Wholesale Clubs','IRS Description':'Wholesale Clubs', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5309':{'combined description':'Duty Free Store', 'USDA description':'Duty Free Store','IRS Description':'Duty Free Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5310':{'combined description':'Discount Stores', 'USDA description':'Discount Stores','IRS Description':'Discount Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5311':{'combined description':'Department Stores', 'USDA description':'Department Stores','IRS Description':'Department Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5331':{'combined description':'Variety Stores', 'USDA description':'Variety Stores','IRS Description':'Variety Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5399':{'combined description':'Misc. General Merchandise', 'USDA description':'Misc. General Merchandise','IRS Description':'Miscellaneous General Merchandise', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5411':{'combined description':'Grocery Stores, Supermarkets', 'USDA description':'Grocery Stores','IRS Description':'Grocery Stores, Supermarkets', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5422':{'combined description':'Meat Provisioners & Freezer and Locker', 'USDA description':'Meat Provisioners & Freezer and Locker','IRS Description':'Freezer and Locker Meat Provisioners', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5441':{'combined description':'Candy, Nut, and Confectionery Stores', 'USDA description':'Candy Stores','IRS Description':'Candy, Nut, and Confectionery Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5451':{'combined description':'Dairy Products Stores', 'USDA description':'Dairy Products Stores','IRS Description':'Dairy Products Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5462':{'combined description':'Bakeries', 'USDA description':'Bakeries','IRS Description':'Bakeries', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5499':{'combined description':'Misc. Food Stores & Convenience Stores and Specialty Markets', 'USDA description':'Misc. Food Stores & Convenience Stores and Specialty Markets','IRS Description':'Miscellaneous Food Stores - Convenience Stores and Specialty Markets', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5511':{'combined description':'Car and Truck Dealers (New and Used) Sales, Service, Repairs, Parts, and Leasing', 'USDA description':'Car and Truck Dealers (New and Used) Sales, Service, Repairs, Parts, and Leasing','IRS Description':'Car and Truck Dealers (New & Used) Sales, Service, Repairs Parts and Leasing ', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5521':{'combined description':'Automobile and Truck Dealers (Used Only)', 'USDA description':'Automobile and Truck Dealers (Used Only)','IRS Description':'Car and Truck Dealers (Used Only) Sales, Service, Repairs Parts and Leasing ', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5531':{'combined description':'Automobile Supply Stores', 'USDA description':'Automobile Supply Stores','IRS Description':'Auto and Home Supply Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5532':{'combined description':'Automotive Tire Stores', 'USDA description':'Automotive Tire Stores','IRS Description':'Automotive Tire Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5533':{'combined description':'Automotive Parts, Accessories Stores', 'USDA description':'Automotive Parts, Accessories Stores','IRS Description':'Automotive Parts and Accessories Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5541':{'combined description':'Service Stations ( with or without ancillary services)', 'USDA description':'Service Stations ( with or without ancillary services)','IRS Description':'Service Stations ', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5542':{'combined description':'Automated Fuel Dispensers', 'USDA description':'Automated Fuel Dispensers','IRS Description':'Automated Fuel Dispensers', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5551':{'combined description':'Boat Dealers', 'USDA description':'Boat Dealers','IRS Description':'Boat Dealers', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5561':{'combined description':'Recreational and Utility Trailers, Camp Dealers', 'USDA description':'Recreational and Utility Trailers, Camp Dealers','IRS Description':'Motorcycle Shops, Dealers', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5571':{'combined description':'Motorcycle Dealers', 'USDA description':'Motorcycle Dealers','IRS Description':'Motorcycle Shops and Dealers', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5592':{'combined description':'Motor Home Dealers', 'USDA description':'Motor Home Dealers','IRS Description':'Motor Homes Dealers', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5598':{'combined description':'Snowmobile Dealers', 'USDA description':'Snowmobile Dealers','IRS Description':'Snowmobile Dealers', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5599':{'combined description':'Miscellaneous Auto Dealers ', 'USDA description':'','IRS Description':'Miscellaneous Auto Dealers ', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5611':{'combined description':'Men\'s and Boy\'s Clothing and Accessories Stores', 'USDA description':'Men\'s and Boy\'s Clothing and Accessories Stores','IRS Description':'Men\'s and Boy\'s Clothing and Accessories Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5621':{'combined description':'Women\'s Ready-to-Wear Stores', 'USDA description':'Women\'s Ready-to-Wear Stores','IRS Description':'Women\'s Ready-To-Wear Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5631':{'combined description':'Women\'s Accessory and Specialty Shops', 'USDA description':'Women\'s Accessory and Specialty Shops','IRS Description':'Women\'s Accessory and Specialty Shops', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5641':{'combined description':'Children\'s and Infant\'s Wear Stores', 'USDA description':'Children\'s and Infant\'s Wear Stores','IRS Description':'Children\'s and Infant\'s Wear Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5651':{'combined description':'Family Clothing Stores', 'USDA description':'Family Clothing Stores','IRS Description':'Family Clothing Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5655':{'combined description':'Sports Apparel, Riding Apparel Stores', 'USDA description':'Sports Apparel, Riding Apparel Stores','IRS Description':'Sports and Riding Apparel Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5661':{'combined description':'Shoe Stores', 'USDA description':'Shoe Stores','IRS Description':'Shoe Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5681':{'combined description':'Furriers and Fur Shops', 'USDA description':'Furriers and Fur Shops','IRS Description':'Furriers and Fur Shops', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5691':{'combined description':'Men\'s and Women\'s Clothing Stores', 'USDA description':'Men\'s and Women\'s Clothing Stores','IRS Description':'Men\'s, Women\'s Clothing Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5697':{'combined description':'Tailors, Seamstress, Mending, and Alterations', 'USDA description':'Tailors, Seamstress, Mending, and Alterations','IRS Description':'Tailors, Alterations', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '5698':{'combined description':'Wig and Toupee Stores', 'USDA description':'Wig and Toupee Stores','IRS Description':'Wig and Toupee Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5699':{'combined description':'Miscellaneous Apparel and Accessory Shops', 'USDA description':'Miscellaneous Apparel and Accessory Shops','IRS Description':'Miscellaneous Apparel and Accessory Shops', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5712':{'combined description':'Furniture, Home Furnishings, and Equipment Stores, ExceptAppliances', 'USDA description':'Furniture, Home Furnishings, and Equipment Stores, ExceptAppliances','IRS Description':'Furniture, Home Furnishings, and Equipment Stores, Except Appliances', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5713':{'combined description':'Floor Covering Stores', 'USDA description':'Floor Covering Stores','IRS Description':'Floor Covering Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5714':{'combined description':'Drapery, Window Covering and Upholstery Stores', 'USDA description':'Drapery, Window Covering and Upholstery Stores','IRS Description':'Drapery, Window Covering, and Upholstery Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5718':{'combined description':'Fireplace, Fireplace Screens, and Accessories Stores', 'USDA description':'Fireplace, Fireplace Screens, and Accessories Stores','IRS Description':'Fireplace, Fireplace Screens, and Accessories Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5719':{'combined description':'Miscellaneous Home Furnishing Specialty Stores', 'USDA description':'Miscellaneous Home Furnishing Specialty Stores','IRS Description':'Miscellaneous Home Furnishing Specialty Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5722':{'combined description':'Household Appliance Stores', 'USDA description':'Household Appliance Stores','IRS Description':'Household Appliance Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5732':{'combined description':'Electronic Sales', 'USDA description':'Electronic Sales','IRS Description':'Electronics Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5733':{'combined description':'Music Stores, Musical Instruments, Piano Sheet Music', 'USDA description':'Music Stores, Musical Instruments, Piano Sheet Music','IRS Description':'Music Stores-Musical Instruments, Pianos, and Sheet Music', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5734':{'combined description':'Computer Software Stores', 'USDA description':'Computer Software Stores','IRS Description':'Computer Software Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5735':{'combined description':'Record Shops', 'USDA description':'Record Shops','IRS Description':'Record Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5811':{'combined description':'Caterers', 'USDA description':'Caterers','IRS Description':'Caterers', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '5812':{'combined description':'Eating places and Restaurants', 'USDA description':'Eating places and Restaurants','IRS Description':'Eating Places, Restaurants', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5813':{'combined description':'Drinking Places (Alcoholic Beverages), Bars, Taverns, Cocktail lounges, Nightclubs and Discotheques', 'USDA description':'Drinking Places (Alcoholic Beverages), Bars, Taverns, Cocktail lounges, Nightclubs and Discotheques','IRS Description':'Drinking Places', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5814':{'combined description':'Fast Food Restaurants', 'USDA description':'Fast Food Restaurants','IRS Description':'Fast Food Restaurants', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5832':{'combined description':'Antique Shops & Sales, Repairs, and Restoration Services', 'USDA description':'Antique Shops & Sales, Repairs, and Restoration Services','IRS Description':'', 'Reportable under 6041/6041A and Authority for Exception':''}, '5912':{'combined description':'Drug Stores and Pharmacies', 'USDA description':'Drug Stores and Pharmacies','IRS Description':'Drug Stores and Pharmacies', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5921':{'combined description':'Package Stores & Beer, Wine, and Liquor', 'USDA description':'Package Stores & Beer, Wine, and Liquor','IRS Description':'Package Stores-Beer, Wine, and Liquor', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5931':{'combined description':'Used Merchandise and Secondhand Stores', 'USDA description':'Used Merchandise and Secondhand Stores','IRS Description':'Used Merchandise and Secondhand Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5932':{'combined description':'Antique Shops', 'USDA description':'','IRS Description':'Antique Shops', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5933':{'combined description':'Pawn Shops and Salvage Yards', 'USDA description':'Pawn Shops and Salvage Yards','IRS Description':'Pawn Shops', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5935':{'combined description':'Wrecking and Salvage Yards', 'USDA description':'Wrecking and Salvage Yards','IRS Description':'Wrecking and Salvage Yards', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '5937':{'combined description':'Antique Reproductions', 'USDA description':'Antique Reproductions','IRS Description':'Antique Reproductions', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5940':{'combined description':'Bicycle Shops & Sales and Service', 'USDA description':'Bicycle Shops & Sales and Service','IRS Description':'Bicycle Shops', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5941':{'combined description':'Sporting Goods Stores', 'USDA description':'Sporting Goods Stores','IRS Description':'Sporting Goods Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5942':{'combined description':'Book Stores', 'USDA description':'Book Stores','IRS Description':'Book Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5943':{'combined description':'Stationery Stores, Office and School Supply Stores', 'USDA description':'Stationery Stores, Office and School Supply Stores','IRS Description':'Stationery Stores, Office, and School Supply Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5944':{'combined description':'Watch, Clock, Jewelry, and Silverware Stores', 'USDA description':'Watch, Clock, Jewelry, and Silverware Stores','IRS Description':'Jewelry Stores, Watches, Clocks, and Silverware Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5945':{'combined description':'Hobby, Toy, and Game Shops', 'USDA description':'Hobby, Toy, and Game Shops','IRS Description':'Hobby, Toy, and Game Shops', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5946':{'combined description':'Camera and Photographic Supply Stores', 'USDA description':'Camera and Photographic Supply Stores','IRS Description':'Camera and Photographic Supply Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5947':{'combined description':'Card Shops, Gift, Novelty, and Souvenir Shops', 'USDA description':'Card Shops, Gift, Novelty, and Souvenir Shops','IRS Description':'Gift, Card, Novelty, and Souvenir Shops', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5948':{'combined description':'Leather Foods Stores', 'USDA description':'Leather Foods Stores','IRS Description':'Luggage and Leather Goods Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5949':{'combined description':'Sewing, Needle, Fabric, and Price Goods Stores', 'USDA description':'Sewing, Needle, Fabric, and Price Goods Stores','IRS Description':'Sewing, Needlework, Fabric, and Piece Goods Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5950':{'combined description':'Glassware/Crystal Stores', 'USDA description':'Glassware/Crystal Stores','IRS Description':'Glassware, Crystal Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5960':{'combined description':'Direct Marketing- Insurance Service', 'USDA description':'Direct Marketing- Insurance Service','IRS Description':'Direct Marketing - Insurance Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '5961':{'combined description':'Mail Order Houses Including Catalog Order Stores, Book/Record Clubs (No longer permitted for U.S. original presentments)', 'USDA description':'Mail Order Houses Including Catalog Order Stores, Book/Record Clubs (No longer permitted for U.S. original presentments)','IRS Description':'', 'Reportable under 6041/6041A and Authority for Exception':''}, '5962':{'combined description':'Direct Marketing & Travel Related Arrangements Services', 'USDA description':'Direct Marketing & Travel Related Arrangements Services','IRS Description':'Direct Marketing - Travel', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '5963':{'combined description':'Door-to-Door Sales', 'USDA description':'Door-to-Door Sales','IRS Description':'Door-To-Door Sales', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5964':{'combined description':'Direct Marketing & Catalog Merchant', 'USDA description':'Direct Marketing & Catalog Merchant','IRS Description':'Direct Marketing - Catalog Merchant', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5965':{'combined description':'Direct Marketing & Catalog and Catalog and Retail Merchant', 'USDA description':'Direct Marketing & Catalog and Catalog and Retail Merchant','IRS Description':'Direct Marketing - Combination Catalog and Retail Merchant', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5966':{'combined description':'Direct Marketing- Outbound Telemarketing Merchant', 'USDA description':'Direct Marketing- Outbound Telemarketing Merchant','IRS Description':'Direct Marketing - Outbound Tele', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5967':{'combined description':'Direct Marketing & Inbound Teleservices Merchant', 'USDA description':'Direct Marketing & Inbound Teleservices Merchant','IRS Description':'Direct Marketing - Inbound Tele', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5968':{'combined description':'Direct Marketing & Continuity/Subscription Merchant', 'USDA description':'Direct Marketing & Continuity/Subscription Merchant','IRS Description':'Direct Marketing - Subscription', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5969':{'combined description':'Direct Marketing & Not Elsewhere Classified', 'USDA description':'Direct Marketing & Not Elsewhere Classified','IRS Description':'Direct Marketing - Other ', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5970':{'combined description':'Artist\'s Supply and Craft Shops', 'USDA description':'Artist\'s Supply and Craft Shops','IRS Description':'Artist\'s Supply and Craft Shops', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5971':{'combined description':'Art Dealers and Galleries', 'USDA description':'Art Dealers and Galleries','IRS Description':'Art Dealers and Galleries', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5972':{'combined description':'Stamp and Coin Stores & Philatelic and Numismatic Supplies', 'USDA description':'Stamp and Coin Stores & Philatelic and Numismatic Supplies','IRS Description':'Stamp and Coin Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5973':{'combined description':'Religious Goods Stores', 'USDA description':'Religious Goods Stores','IRS Description':'Religious Goods Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5975':{'combined description':'Hearing Aids & Sales, Service, and Supply Stores', 'USDA description':'Hearing Aids & Sales, Service, and Supply Stores','IRS Description':'Hearing Aids Sales and Supplies', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5976':{'combined description':'Orthopedic Goods Prosthetic Devices', 'USDA description':'Orthopedic Goods Prosthetic Devices','IRS Description':'Orthopedic Goods - Prosthetic Devices', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5977':{'combined description':'Cosmetic Stores', 'USDA description':'Cosmetic Stores','IRS Description':'Cosmetic Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5978':{'combined description':'Typewriter Stores & Sales, Rental, Service', 'USDA description':'Typewriter Stores & Sales, Rental, Service','IRS Description':'Typewriter Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5983':{'combined description':'Fuel & Fuel Oil, Wood, Coal, Liquefied Petroleum', 'USDA description':'Fuel & Fuel Oil, Wood, Coal, Liquefied Petroleum','IRS Description':'Fuel Dealers (Non Automotive)', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5992':{'combined description':'Florists', 'USDA description':'Florists','IRS Description':'Florists', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5993':{'combined description':'Cigar Stores and Stands', 'USDA description':'Cigar Stores and Stands','IRS Description':'Cigar Stores and Stands', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5994':{'combined description':'News Dealers and Newsstands', 'USDA description':'News Dealers and Newsstands','IRS Description':'News Dealers and Newsstands', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5995':{'combined description':'Pet Shops, Pet Foods, and Supplies Stores', 'USDA description':'Pet Shops, Pet Foods, and Supplies Stores','IRS Description':'Pet Shops, Pet Food, and Supplies', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5996':{'combined description':'Swimming Pools & Sales, Service, and Supplies', 'USDA description':'Swimming Pools & Sales, Service, and Supplies','IRS Description':'Swimming Pools Sales', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5997':{'combined description':'Electric Razor Stores & Sales and Service', 'USDA description':'Electric Razor Stores & Sales and Service','IRS Description':'Electric Razor Stores', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5998':{'combined description':'Tent and Awning Shops', 'USDA description':'Tent and Awning Shops','IRS Description':'Tent and Awning Shops', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '5999':{'combined description':'Miscellaneous and Specialty Retail Stores', 'USDA description':'Miscellaneous and Specialty Retail Stores','IRS Description':'Miscellaneous Specialty Retail', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '6010':{'combined description':'Financial Institutions & Manual Cash Disbursements', 'USDA description':'Financial Institutions & Manual Cash Disbursements','IRS Description':'Manual Cash Disburse', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '6011':{'combined description':'Financial Institutions & Manual Cash Disbursements', 'USDA description':'Financial Institutions & Manual Cash Disbursements','IRS Description':'Automated Cash Disburse', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '6012':{'combined description':'Financial Institutions & Merchandise and Services', 'USDA description':'Financial Institutions & Merchandise and Services','IRS Description':'Financial Institutions', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '6051':{'combined description':'Non-Financial Institutions & Foreign Currency, Money Orders (not wire transfer) and Travelers Cheques', 'USDA description':'Non-Financial Institutions & Foreign Currency, Money Orders (not wire transfer) and Travelers Cheques','IRS Description':'Non-FI, Money Orders', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '6211':{'combined description':'Security Brokers/Dealers', 'USDA description':'Security Brokers/Dealers','IRS Description':'Security Brokers/Dealers', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '6300':{'combined description':'Insurance Sales, Underwriting, and Premiums', 'USDA description':'Insurance Sales, Underwriting, and Premiums','IRS Description':'Insurance Underwriting, Premiums', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '6381':{'combined description':'Insurance Premiums, (no longer valid for first presentment work)', 'USDA description':'Insurance Premiums, (no longer valid for first presentment work)','IRS Description':'', 'Reportable under 6041/6041A and Authority for Exception':''}, '6399':{'combined description':'Insurance, Not Elsewhere Classified ( no longer valid forfirst presentment work)', 'USDA description':'Insurance, Not Elsewhere Classified ( no longer valid forfirst presentment work)','IRS Description':'Insurance - Default', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '6513':{'combined description':'Real Estate Agents and Managers - Rentals', 'USDA description':'','IRS Description':'Real Estate Agents and Managers - Rentals', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7011':{'combined description':'Lodging & Hotels, Motels, Resorts, Central Reservation Services (not elsewhere classified)', 'USDA description':'Lodging & Hotels, Motels, Resorts, Central Reservation Services (not elsewhere classified)','IRS Description':'Hotels, Motels, and Resorts', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7012':{'combined description':'Timeshares', 'USDA description':'Timeshares','IRS Description':'Timeshares', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7032':{'combined description':'Sporting and Recreational Camps', 'USDA description':'Sporting and Recreational Camps','IRS Description':'Sporting/Recreation Camps', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7033':{'combined description':'Trailer Parks and Camp Grounds', 'USDA description':'Trailer Parks and Camp Grounds','IRS Description':'Trailer Parks, Campgrounds', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7210':{'combined description':'Laundry, Cleaning, and Garment Services', 'USDA description':'Laundry, Cleaning, and Garment Services','IRS Description':'Laundry, Cleaning Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7211':{'combined description':'Laundry & Family and Commercial', 'USDA description':'Laundry & Family and Commercial','IRS Description':'Laundries ', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7216':{'combined description':'Dry Cleaners', 'USDA description':'Dry Cleaners','IRS Description':'Dry Cleaners', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7217':{'combined description':'Carpet and Upholstery Cleaning', 'USDA description':'Carpet and Upholstery Cleaning','IRS Description':'Carpet/Upholstery Cleaning', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7221':{'combined description':'Photographic Studios', 'USDA description':'Photographic Studios','IRS Description':'Photographic Studios', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7230':{'combined description':'Barber and Beauty Shops', 'USDA description':'Barber and Beauty Shops','IRS Description':'Barber and Beauty Shops', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7251':{'combined description':'Shop Repair Shops and Shoe Shine Parlors, and Hat Cleaning Shops', 'USDA description':'Shop Repair Shops and Shoe Shine Parlors, and Hat Cleaning Shops','IRS Description':'Shoe Repair/Hat Cleaning', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7261':{'combined description':'Funeral Service and Crematories', 'USDA description':'Funeral Service and Crematories','IRS Description':'Funeral Services, Crematories', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7273':{'combined description':'Dating and Escort Services', 'USDA description':'Dating and Escort Services','IRS Description':'Dating/Escort Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7276':{'combined description':'Tax Preparation Service', 'USDA description':'Tax Preparation Service','IRS Description':'Tax Preparation Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7277':{'combined description':'Counseling Service & Debt, Marriage, Personal', 'USDA description':'Counseling Service & Debt, Marriage, Personal','IRS Description':'Counseling Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7278':{'combined description':'Buying/Shopping Services, Clubs', 'USDA description':'Buying/Shopping Services, Clubs','IRS Description':'Buying/Shopping Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7296':{'combined description':'Clothing Rental & Costumes, Formal Wear, Uniforms', 'USDA description':'Clothing Rental & Costumes, Formal Wear, Uniforms','IRS Description':'Clothing Rental ', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7297':{'combined description':'Massage Parlors', 'USDA description':'Massage Parlors','IRS Description':'Massage Parlors', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7298':{'combined description':'Health and Beauty Shops', 'USDA description':'Health and Beauty Shops','IRS Description':'Health and Beauty Spas', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7299':{'combined description':'Miscellaneous Personal Services ( not elsewhere classifies)', 'USDA description':'Miscellaneous Personal Services ( not elsewhere classifies)','IRS Description':'Miscellaneous General Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7311':{'combined description':'Advertising Services', 'USDA description':'Advertising Services','IRS Description':'Advertising Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7321':{'combined description':'Consumer Credit Reporting Agencies', 'USDA description':'Consumer Credit Reporting Agencies','IRS Description':'Credit Reporting Agencies', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7332':{'combined description':'Blueprinting and Photocopying Services', 'USDA description':'Blueprinting and Photocopying Services','IRS Description':'', 'Reportable under 6041/6041A and Authority for Exception':''}, '7333':{'combined description':'Commercial Photography, Art and Graphics', 'USDA description':'Commercial Photography, Art and Graphics','IRS Description':'Commercial Photography, Art and Graphics', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7338':{'combined description':'Quick Copy, Reproduction and Blueprinting Services', 'USDA description':'Quick Copy, Reproduction and Blueprinting Services','IRS Description':'Quick Copy, Repro, and Blueprint', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7339':{'combined description':'Stenographic and Secretarial Support Services', 'USDA description':'Stenographic and Secretarial Support Services','IRS Description':'Secretarial Support Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7342':{'combined description':'Exterminating and Disinfecting Services', 'USDA description':'Exterminating and Disinfecting Services','IRS Description':'Exterminating Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7349':{'combined description':'Cleaning and Maintenance, Janitorial Services', 'USDA description':'Cleaning and Maintenance, Janitorial Services','IRS Description':'Cleaning and Maintenance', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7361':{'combined description':'Employment Agencies, Temporary Help Services', 'USDA description':'Employment Agencies, Temporary Help Services','IRS Description':'Employment/Temp Agencies', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7372':{'combined description':'Computer Programming, Integrated Systems Design and Data Processing Services', 'USDA description':'Computer Programming, Integrated Systems Design and Data Processing Services','IRS Description':'Computer Programming', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7375':{'combined description':'Information Retrieval Services', 'USDA description':'Information Retrieval Services','IRS Description':'Information Retrieval Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7379':{'combined description':'Computer Maintenance and Repair Services, Not Elsewhere Classified', 'USDA description':'Computer Maintenance and Repair Services, Not Elsewhere Classified','IRS Description':'Computer Repair', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7392':{'combined description':'Management, Consulting, and Public Relations Services', 'USDA description':'Management, Consulting, and Public Relations Services','IRS Description':'Consulting, Public Relations', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7393':{'combined description':'Protective and Security Services & Including Armored Carsand Guard Dogs', 'USDA description':'Protective and Security Services & Including Armored Carsand Guard Dogs','IRS Description':'Detective Agencies', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7394':{'combined description':'Equipment Rental and Leasing Services, Tool Rental, Furniture Rental, and Appliance Rental', 'USDA description':'Equipment Rental and Leasing Services, Tool Rental, Furniture Rental, and Appliance Rental','IRS Description':'Equipment Rental ', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7395':{'combined description':'Photofinishing Laboratories, Photo Developing', 'USDA description':'Photofinishing Laboratories, Photo Developing','IRS Description':'Photo Developing', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7399':{'combined description':'Business Services, Not Elsewhere Classified', 'USDA description':'Business Services, Not Elsewhere Classified','IRS Description':'Miscellaneous Business Services ', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7511':{'combined description':'Truck Stop', 'USDA description':'','IRS Description':'Truck Stop', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7512':{'combined description':'Car Rental Companies ( Not Listed Below)', 'USDA description':'Car Rental Companies ( Not Listed Below)','IRS Description':'Car Rental Agencies', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7513':{'combined description':'Truck and Utility Trailer Rentals', 'USDA description':'Truck and Utility Trailer Rentals','IRS Description':'Truck/Utility Trailer Rentals', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7519':{'combined description':'Motor Home and Recreational Vehicle Rentals', 'USDA description':'Motor Home and Recreational Vehicle Rentals','IRS Description':'Recreational Vehicle Rentals', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7523':{'combined description':'Automobile Parking Lots and Garages', 'USDA description':'Automobile Parking Lots and Garages','IRS Description':'Parking Lots, Garages', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7531':{'combined description':'Automotive Body Repair Shops', 'USDA description':'Automotive Body Repair Shops','IRS Description':'Auto Body Repair Shops', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7534':{'combined description':'Tire Re-treading and Repair Shops', 'USDA description':'Tire Re-treading and Repair Shops','IRS Description':'Tire Retreading and Repair', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7535':{'combined description':'Paint Shops & Automotive', 'USDA description':'Paint Shops & Automotive','IRS Description':'Auto Paint Shops', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7538':{'combined description':'Automotive Service Shops', 'USDA description':'Automotive Service Shops','IRS Description':'Auto Service Shops', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7542':{'combined description':'Car Washes', 'USDA description':'Car Washes','IRS Description':'Car Washes', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7549':{'combined description':'Towing Services', 'USDA description':'Towing Services','IRS Description':'Towing Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7622':{'combined description':'Radio Repair Shops', 'USDA description':'Radio Repair Shops','IRS Description':'Electronics Repair Shops', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7623':{'combined description':'Air Conditioning and Refrigeration Repair Shops', 'USDA description':'Air Conditioning and Refrigeration Repair Shops','IRS Description':'A/C, Refrigeration Repair', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7629':{'combined description':'Electrical And Small Appliance Repair Shops', 'USDA description':'Electrical And Small Appliance Repair Shops','IRS Description':'Small Appliance Repair', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7631':{'combined description':'Watch, Clock, and Jewelry Repair', 'USDA description':'Watch, Clock, and Jewelry Repair','IRS Description':'Watch/Jewelry Repair', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7641':{'combined description':'Furniture, Furniture Repair, and Furniture Refinishing', 'USDA description':'Furniture, Furniture Repair, and Furniture Refinishing','IRS Description':'Furniture Repair, Refinishing', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7692':{'combined description':'Welding Repair', 'USDA description':'Welding Repair','IRS Description':'Welding Repair', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7699':{'combined description':'Repair Shops and Related Services &Miscellaneous', 'USDA description':'Repair Shops and Related Services &Miscellaneous','IRS Description':'Miscellaneous Repair Shops', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7829':{'combined description':'Motion Pictures and Video Tape Production and Distribution', 'USDA description':'Motion Pictures and Video Tape Production and Distribution','IRS Description':'Picture/Video Production', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7832':{'combined description':'Motion Picture Theaters', 'USDA description':'Motion Picture Theaters','IRS Description':'Motion Picture Theaters', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7841':{'combined description':'Video Tape Rental Stores', 'USDA description':'Video Tape Rental Stores','IRS Description':'Video Tape Rental Stores', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7911':{'combined description':'Dance Halls, Studios and Schools', 'USDA description':'Dance Halls, Studios and Schools','IRS Description':'Dance Hall, Studios, Schools', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7922':{'combined description':'Theatrical Producers (Except Motion Pictures), Ticket Agencies', 'USDA description':'Theatrical Producers (Except Motion Pictures), Ticket Agencies','IRS Description':'Theatrical Ticket Agencies', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7929':{'combined description':'Bands, Orchestras, and Miscellaneous Entertainers (Not Elsewhere Classified)', 'USDA description':'Bands, Orchestras, and Miscellaneous Entertainers (Not Elsewhere Classified)','IRS Description':'Bands, Orchestras', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7932':{'combined description':'Billiard and Pool Establishments', 'USDA description':'Billiard and Pool Establishments','IRS Description':'Billiard/Pool Establishments', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7933':{'combined description':'Bowling Alleys', 'USDA description':'Bowling Alleys','IRS Description':'Bowling Alleys', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7941':{'combined description':'Commercial Sports, Athletic Fields, Professional Sport Clubs, and Sport Promoters', 'USDA description':'Commercial Sports, Athletic Fields, Professional Sport Clubs, and Sport Promoters','IRS Description':'Sports Clubs/Fields', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7991':{'combined description':'Tourist Attractions and Exhibits', 'USDA description':'Tourist Attractions and Exhibits','IRS Description':'Tourist Attractions and Exhibits', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7992':{'combined description':'Golf Courses & Public', 'USDA description':'Golf Courses & Public','IRS Description':'Golf Courses - Public', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7993':{'combined description':'Video Amusement Game Supplies', 'USDA description':'Video Amusement Game Supplies','IRS Description':'Video Amusement Game Supplies', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '7994':{'combined description':'Video Game Arcades/Establishments', 'USDA description':'Video Game Arcades/Establishments','IRS Description':'Video Game Arcades', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7995':{'combined description':'Betting (including Lottery Tickets, Casino Gaming Chips, Off-track Betting and Wagers)', 'USDA description':'Betting (including Lottery Tickets, Casino Gaming Chips, Off-track Betting and Wagers)','IRS Description':'Betting/Casino Gambling', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7996':{'combined description':'Amusement Parks, Carnivals, Circuses, Fortune Tellers', 'USDA description':'Amusement Parks, Carnivals, Circuses, Fortune Tellers','IRS Description':'Amusement Parks/Carnivals', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7997':{'combined description':'Membership Clubs (Sports, Recreation, Athletic), Country Clubs, and Private Golf Courses', 'USDA description':'Membership Clubs (Sports, Recreation, Athletic), Country Clubs, and Private Golf Courses','IRS Description':'Country Clubs', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7998':{'combined description':'Aquariums, Sea-aquariums, Dolphinariums', 'USDA description':'Aquariums, Sea-aquariums, Dolphinariums','IRS Description':'Aquariums', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '7999':{'combined description':'Recreation Services (Not Elsewhere Classified)', 'USDA description':'Recreation Services (Not Elsewhere Classified)','IRS Description':'Miscellaneous Recreation Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8011':{'combined description':'Doctors and Physicians (Not Elsewhere Classified)', 'USDA description':'Doctors and Physicians (Not Elsewhere Classified)','IRS Description':'Doctors', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8021':{'combined description':'Dentists and Orthodontists', 'USDA description':'Dentists and Orthodontists','IRS Description':'Dentists, Orthodontists', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8031':{'combined description':'Osteopaths', 'USDA description':'Osteopaths','IRS Description':'Osteopaths', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8041':{'combined description':'Chiropractors', 'USDA description':'Chiropractors','IRS Description':'Chiropractors', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8042':{'combined description':'Optometrists and Ophthalmologists', 'USDA description':'Optometrists and Ophthalmologists','IRS Description':'Optometrists, Ophthalmologist', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8043':{'combined description':'Opticians, Opticians Goods and Eyeglasses', 'USDA description':'Opticians, Opticians Goods and Eyeglasses','IRS Description':'Opticians, Eyeglasses', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8044':{'combined description':'Opticians, Optical Goods, and Eyeglasses (no longer validfor first presentments)', 'USDA description':'Opticians, Optical Goods, and Eyeglasses (no longer validfor first presentments)','IRS Description':'', 'Reportable under 6041/6041A and Authority for Exception':''}, '8049':{'combined description':'Podiatrists and Chiropodists', 'USDA description':'Podiatrists and Chiropodists','IRS Description':'Chiropodists, Podiatrists', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8050':{'combined description':'Nursing and Personal Care Facilities', 'USDA description':'Nursing and Personal Care Facilities','IRS Description':'Nursing/Personal Care ', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8062':{'combined description':'Hospitals', 'USDA description':'Hospitals','IRS Description':'Hospitals', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8071':{'combined description':'Medical and Dental Laboratories', 'USDA description':'Medical and Dental Laboratories','IRS Description':'Medical and Dental Labs', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8099':{'combined description':'Medical Services and Health Practitioners (Not Elsewhere Classified)', 'USDA description':'Medical Services and Health Practitioners (Not Elsewhere Classified)','IRS Description':'Medical Services ', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8111':{'combined description':'Legal Services and Attorneys', 'USDA description':'Legal Services and Attorneys','IRS Description':'Legal Services, Attorneys', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8211':{'combined description':'Elementary and Secondary Schools', 'USDA description':'Elementary and Secondary Schools','IRS Description':'Elementary, Secondary Schools', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(2)'}, '8220':{'combined description':'Colleges, Junior Colleges, Universities, and ProfessionalSchools', 'USDA description':'Colleges, Junior Colleges, Universities, and ProfessionalSchools','IRS Description':'Colleges, Universities', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(2)'}, '8241':{'combined description':'Correspondence Schools', 'USDA description':'Correspondence Schools','IRS Description':'Correspondence Schools', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(2)'}, '8244':{'combined description':'Business and Secretarial Schools', 'USDA description':'Business and Secretarial Schools','IRS Description':'Business/Secretarial Schools', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(2)'}, '8249':{'combined description':'Vocational Schools and Trade Schools', 'USDA description':'Vocational Schools and Trade Schools','IRS Description':'Vocational/Trade Schools', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(2)'}, '8299':{'combined description':'Schools and Educational Services ( Not Elsewhere Classified)', 'USDA description':'Schools and Educational Services ( Not Elsewhere Classified)','IRS Description':'Educational Services ', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8351':{'combined description':'Child Care Services', 'USDA description':'Child Care Services','IRS Description':'Child Care Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8398':{'combined description':'Charitable and Social Service Organizations', 'USDA description':'Charitable and Social Service Organizations','IRS Description':'Charitable and Social Service Organizations - Fundraising', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(2)'}, '8641':{'combined description':'Civic, Fraternal, and Social Associations', 'USDA description':'Civic, Fraternal, and Social Associations','IRS Description':'Civic, Social, Fraternal Associations', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(2)'}, '8651':{'combined description':'Political Organizations', 'USDA description':'Political Organizations','IRS Description':'Political Organizations', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8661':{'combined description':'Religious Organizations', 'USDA description':'Religious Organizations','IRS Description':'Religious Organizations', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(2)'}, '8675':{'combined description':'Automobile Associations', 'USDA description':'Automobile Associations','IRS Description':'Automobile Associations', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8699':{'combined description':'Membership Organizations ( Not Elsewhere Classified)', 'USDA description':'Membership Organizations ( Not Elsewhere Classified)','IRS Description':'Membership Organizations', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8734':{'combined description':'Testing Laboratories ( non-medical)', 'USDA description':'Testing Laboratories ( non-medical)','IRS Description':'Testing Laboratories', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8911':{'combined description':'Architectural & Engineering and Surveying Services', 'USDA description':'Architectural & Engineering and Surveying Services','IRS Description':'Architectural/Surveying Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8931':{'combined description':'Accounting, Auditing, and Bookkeeping Services', 'USDA description':'Accounting, Auditing, and Bookkeeping Services','IRS Description':'Accounting/Bookkeeping Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '8999':{'combined description':'Professional Services ( Not Elsewhere Defined)', 'USDA description':'Professional Services ( Not Elsewhere Defined)','IRS Description':'Professional Services', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '9211':{'combined description':'Court Costs, including Alimony and Child Support', 'USDA description':'Court Costs, including Alimony and Child Support','IRS Description':'Court Costs, Including Alimony and Child Support - Courts of Law', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(4)'}, '9222':{'combined description':'Fines', 'USDA description':'Fines','IRS Description':'Fines - Government Administrative Entities', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(4)'}, '9223':{'combined description':'Bail and Bond Payments', 'USDA description':'Bail and Bond Payments','IRS Description':'Bail and Bond Payments (payment to the surety for the bond, not the actual bond paid to the government agency) ', 'Reportable under 6041/6041A and Authority for Exception':'Yes'}, '9311':{'combined description':'Tax Payments', 'USDA description':'Tax Payments','IRS Description':'Tax Payments - Government Agencies', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(4)'}, '9399':{'combined description':'Government Services ( Not Elsewhere Classified)', 'USDA description':'Government Services ( Not Elsewhere Classified)','IRS Description':'Government Services (Not Elsewhere Classified)', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(4)'}, '9402':{'combined description':'Postal Services & Government Only', 'USDA description':'Postal Services & Government Only','IRS Description':'Postal Services - Government Only', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(3)'}, '9405':{'combined description':'Intra & Government Transactions', 'USDA description':'Intra & Government Transactions','IRS Description':'U.S. Federal Government Agencies or Departments', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(p)(3)'}, '9700':{'combined description':'Automated Referral Service ( For Visa Only)', 'USDA description':'Automated Referral Service ( For Visa Only)','IRS Description':'', 'Reportable under 6041/6041A and Authority for Exception under 6041/6041A and Authority for Exception':''}, '9701':{'combined description':'Visa Credential Service ( For Visa Only)', 'USDA description':'Visa Credential Service ( For Visa Only)','IRS Description':'', 'Reportable under 6041/6041A and Authority for Exception':''}, '9702':{'combined description':'GCAS Emergency Services ( For Visa Only)', 'USDA description':'GCAS Emergency Services ( For Visa Only)','IRS Description':'', 'Reportable under 6041/6041A and Authority for Exception':''}, '9950':{'combined description':'Intra & Company Purchases ( For Visa Only)', 'USDA description':'Intra & Company Purchases ( For Visa Only)','IRS Description':'Intra-Company Purchases', 'Reportable under 6041/6041A and Authority for Exception':'No1.6041-3(c)'}, '9999':{'combined description':'MCC Invalid', 'USDA description':'MCC Invalid','IRS Description':'MCC Invalid', 'Reportable under 6041/6041A and Authority for Exception':'no'}, } ofxparse-0.14/ofxparse/ofxutil.py0000664000175000017500000002116612202362322020716 0ustar jseutterjseutter00000000000000from __future__ import absolute_import, with_statement import os import copy import collections import xml.etree.ElementTree as ET if 'OrderedDict' in dir(collections): odict = collections else: import ordereddict as odict import six class InvalidOFXStructureException(Exception): pass class OfxData(object): def __init__(self, tag): self.nodes = odict.OrderedDict() self.tag = tag self.data = "" def add_tag(self, name): name = name.lower() if name not in self.nodes: self.nodes[name] = OfxData(name.upper()) return self.nodes[name] elif not isinstance(self.nodes[name], list): self.nodes[name] = [self.nodes[name], OfxData(name.upper())] else: self.nodes[name].append(OfxData(name.upper())) return self.nodes[name][-1] def del_tag(self, name): name = name.lower() if name in self.nodes: del self.nodes[name] def __setattr__(self, name, value): if name in self.__dict__ or name in ['nodes', 'tag', 'data', 'headers', 'xml']: self.__dict__[name] = value else: self.del_tag(name) if isinstance(value, list): for val in value: tag = self.add_tag(name) tag.nodes = val.nodes tag.data = val.data elif isinstance(value, OfxData): tag = self.add_tag(name) tag.nodes = value.nodes tag.data = value.data else: tag = self.add_tag(name) tag.data = str(value) def __getattr__(self, name): if name in self.__dict__: return self.__dict__[name] elif name in self.__dict__['nodes']: return self.__dict__['nodes'][name] else: tag = self.add_tag(name) return tag def __delattr__(self, name): if name in self.__dict__: del self.__dict__[name] elif name in self.__dict__['nodes']: del self.__dict__['nodes'][name] else: raise AttributeError def __getitem__(self, name): item_list = [] self.find(name, item_list) return item_list def find(self, name, item_list): for n, child in six.iteritems(self.nodes): if isinstance(child, OfxData): if child.tag.lower() == name: item_list.append(child) child.find(name, item_list) else: for grandchild in child: if grandchild.tag.lower() == name: item_list.append(grandchild) grandchild.find(name, item_list) def __iter__(self): for k, v in six.iteritems(self.nodes): yield v def __contains__(self, item): return item in self.nodes def __len__(self): return len(self.nodes) def __str__(self): return os.linesep.join("\t" * line[1] + line[0] for line in self.format()) def format(self): if self.data or not self.nodes: if self.tag.upper() == "OFX": return [["<%s>%s" % (self.tag, self.data if self.data else "", self.tag), 0]] return [["<%s>%s" % (self.tag, self.data), 0]] else: ret = [["<%s>" % self.tag, -1]] for name, child in six.iteritems(self.nodes): if isinstance(child, OfxData): ret.extend(child.format()) else: for grandchild in child: ret.extend(grandchild.format()) ret.append(["" % self.tag, -1]) for item in ret: item[1] += 1 return ret class OfxUtil(OfxData): def __init__(self, ofx_data=None): super(OfxUtil, self).__init__('OFX') self.headers = odict.OrderedDict() self.xml = "" if ofx_data: if isinstance(ofx_data, six.string_types) and not ofx_data.lower().endswith('.ofx'): self.parse(ofx_data) else: self.parse(open(ofx_data).read() if isinstance(ofx_data, six.string_types) else ofx_data.read()) def parse(self, ofx): try: for line in ofx.splitlines(): if line.strip() == "": break header, value = line.split(":") self.headers[header] = value except ValueError: pass except: raise finally: if "OFXHEADER" not in self.headers: self.headers["OFXHEADER"] = "100" if "VERSION" not in self.headers: self.headers["VERSION"] = "102" if "SECURITY" not in self.headers: self.headers["SECURITY"] = "NONE" if "OLDFILEUID" not in self.headers: self.headers["OLDFILEUID"] = "NONE" if "NEWFILEUID" not in self.headers: self.headers["NEWFILEUID"] = "NONE" try: tags = ofx.split("<") if len(tags) > 1: tags = ["<" + t.strip() for t in tags[1:]] heirarchy = [] can_open = True for i, tag in enumerate(tags): gt = tag.index(">") if tag[1] != "/": #Is an opening tag if not can_open: tags[i - 1] = tags[i - 1] + "" can_open = True tag_name = tag[1:gt].split()[0] heirarchy.append(tag_name) if len(tag) > gt + 1: can_open = False else: #Is a closing tag tag_name = tag[2:gt].split()[0] if tag_name not in heirarchy: #Close tag with no matching open, so delete it tags[i] = tag[gt + 1:] else: #Close tag with matching open, but other open tags that need to be closed first while(tag_name != heirarchy[-1]): tags[i - 1] = tags[i - 1] + "" can_open = True heirarchy.pop() self.xml = ET.fromstringlist(tags) self.load_from_xml(self, self.xml) except: raise InvalidOFXStructureException def load_from_xml(self, ofx, xml): ofx.data = xml.text for child in xml: tag = ofx.add_tag(child.tag) self.load_from_xml(tag, child) def reload_xml(self): super(OfxUtil, self).__init__('OFX') self.load_from_xml(self, self.xml) def write(self, output_file): with open(output_file, 'wb') as f: f.write(str(self)) def __str__(self): ret = os.linesep.join(":".join(line) for line in six.iteritems(self.headers)) + os.linesep * 2 ret += super(OfxUtil, self).__str__() return ret if __name__ == "__main__": here = os.path.dirname(__file__) fixtures = os.path.join(here, '../tests/fixtures/') ofx = OfxUtil(fixtures + 'checking.ofx') # ofx = OfxUtil(fixtures + 'fidelity.ofx') #Manipulate OFX file via XML library # for transaction in ofx.xml.iter('STMTTRN'): # transaction.find('NAME').text = transaction.find('MEMO').text # transaction.remove(transaction.find('MEMO')) # ofx.reload_xml() #Manipulate OFX file via object tree built from XML # for transaction in ofx.bankmsgsrsv1.stmttrnrs.stmtrs.banktranlist.stmttrn: # transaction.name = transaction.memo # del transaction.memo # transaction.notes = "Acknowledged" #Modified sytnax for object tree data manipulation #I'm using the __getitem__ method like the xml.iter method from ElementTree, as a recursive search for transaction in ofx['stmttrn']: transaction.name = transaction.memo del transaction.memo transaction.notes = "Acknowledged" # for bal in ofx['bal']: # print(bal) # ofx.test = "First assignment operation" # ofx.test = "Second assignment operation" # print(ofx) #Write OFX data to output file # ofx.write('out.ofx') # for file_name in os.listdir(fixtures): # if os.path.isfile(fixtures + file_name): # print "Attempting to parse", file_name # ofx = OfxParser('fixtures/' + file_name) # # file_parts = file_name.split(".") # file_parts.insert(1, 'v2') # with open('fixtures/' + ".".join(file_parts), 'wb') as f: # f.write(str(ofx)) ofxparse-0.14/AUTHORS0000664000175000017500000000035512210373034016071 0ustar jseutterjseutter00000000000000Developers: Jerry Seutter Contributors: Wes Devauld Leonardo Santagada Eric Moritz James Addison Matt Haggard Richart T Guy Alex Chiang Matt Haggard Andre Smolik greggles@github mikeivanov@github danc86@github