PROPERTIES_LAYOUT = [
    {'start': 0,    'end': 9,    'name': 'PARCEL'},
    {'start': 9,    'end': 34,   'name': 'LOC'},
    {'start': 34,   'end': 59,   'name': 'OWNER1'},
    {'start': 59,   'end': 84,   'name': 'OWNER2'},
    {'start': 84,   'end': 87,   'name': 'CENSUS'},
    {'start': 87,   'end': 96,   'name': 'ZIP'},
    {'start': 96,   'end': 98,   'name': 'WD_GEO'},
    {'start': 98,   'end': 103,  'name': 'ST_CD'},
    {'start': 103,  'end': 108,  'name': 'HOUSE_NO'},
    {'start': 108,  'end': 109,  'name': 'SUFF'},
    {'start': 109,  'end': 116,  'name': 'UNIT'},
    {'start': 116,  'end': 118,  'name': 'EXT'},
    {'start': 118,  'end': 126,  'name': 'RCD_DT'},
    {'start': 126,  'end': 134,  'name': 'SALE_DATE'},
    {'start': 134,  'end': 146,  'name': 'SALE_PR'},
    {'start': 146,  'end': 147,  'name': 'SALE_TY'},
    {'start': 147,  'end': 148,  'name': 'UNF'},
    {'start': 148,  'end': 156,  'name': 'ASSMT_DT'},
    {'start': 156,  'end': 164,  'name': 'MV_DT'},
    {'start': 164,  'end': 176,  'name': 'MV'},
    {'start': 176,  'end': 186,  'name': 'TX_LND'},
    {'start': 186,  'end': 196,  'name': 'TX_BLDG'},
    {'start': 196,  'end': 206,  'name': 'XMPT_LND'},
    {'start': 206,  'end': 216,  'name': 'XMPT_BLDG'},
    {'start': 216,  'end': 217,  'name': 'CAT_CD'},
    {'start': 217,  'end': 220,  'name': 'XMPT_CD'},
    {'start': 220,  'end': 228,  'name': 'XMPT_DT'},
    {'start': 228,  'end': 233,  'name': 'BLDG_CD'},
    {'start': 233,  'end': 238,  'name': 'ZONE'},
    {'start': 238,  'end': 244,  'name': 'LND_USE'},
    {'start': 244,  'end': 246,  'name': 'DES_AREA'},
    {'start': 246,  'end': 247,  'name': 'AREA_USE'},
    {'start': 247,  'end': 248,  'name': 'SITE_TYP'},
    {'start': 248,  'end': 259,  'name': 'FRT',        'type': 'number'},
    {'start': 259,  'end': 270,  'name': 'DPT',        'type': 'number'},
    {'start': 270,  'end': 271,  'name': 'SHP'},
    {'start': 271,  'end': 282,  'name': 'TOT_AREA',   'type': 'number'},
    {'start': 282,  'end': 283,  'name': 'TOP'},
    {'start': 283,  'end': 284,  'name': 'GRG_TYP'},
    {'start': 284,  'end': 286,  'name': 'GRG_SP'},
    {'start': 286,  'end': 288,  'name': 'OFF_ST'},
    {'start': 288,  'end': 289,  'name': 'VIEW'},
    {'start': 289,  'end': 290,  'name': 'OTR_BLDG'},
    {'start': 290,  'end': 293,  'name': 'STORIES',    'type': 'number'},
    {'start': 293,  'end': 294,  'name': 'GEN_CONST'},
    {'start': 294,  'end': 295,  'name': 'TYP_DWELL'},
    {'start': 295,  'end': 303,  'name': 'DT_EXT_COND'},
    {'start': 303,  'end': 304,  'name': 'EXT_COND'},
    {'start': 304,  'end': 305,  'name': 'QLT_GRD'},
    {'start': 305,  'end': 309,  'name': 'YR_BUILT'},
    {'start': 309,  'end': 310,  'name': 'EST_YR_BLT'},
    {'start': 310,  'end': 311,  'name': 'FLR_PLAN'},
    {'start': 311,  'end': 314,  'name': 'NO_RM',      'type': 'number'},
    {'start': 314,  'end': 317,  'name': 'NO_BD',      'type': 'number'},
    {'start': 317,  'end': 320,  'name': 'NO_BATH',    'type': 'number'},
    {'start': 320,  'end': 321,  'name': 'BASMT'},
    {'start': 321,  'end': 332,  'name': 'BASMT_SQFT'},
    {'start': 332,  'end': 334,  'name': 'FIRE'},
    {'start': 334,  'end': 335,  'name': 'TYP_HEAT'},
    {'start': 335,  'end': 336,  'name': 'FUEL'},
    {'start': 336,  'end': 337,  'name': 'CNT_AIR'},
    {'start': 337,  'end': 338,  'name': 'INT_COND'},
    {'start': 338,  'end': 342,  'name': 'AMTY'},
    {'start': 342,  'end': 343,  'name': 'TYP_IMP'},
    {'start': 343,  'end': 344,  'name': 'UTLY'},
    {'start': 344,  'end': 345,  'name': 'SEW'},
    {'start': 345,  'end': 346,  'name': 'SEP_UTS'},
    {'start': 346,  'end': 353,  'name': 'TOT_LIV_AREA'},
    {'start': 353,  'end': 354,  'name': 'OFF_PROP'},
    {'start': 354,  'end': 361,  'name': 'BK_PG'},
    {'start': 361,  'end': 376,  'name': 'REG_NO'},
    {'start': 376,  'end': 385,  'name': 'CROSS_REF'},
    {'start': 385,  'end': 386,  'name': 'END'},
]

BUILDING_CODES_LAYOUT = [
    {'start': 0,   'end': 5,   'name': 'BLDG_CD_BLDGCODE'},
    {'start': 5,   'end': 30,  'name': 'BLDG_CD_DESCRIPTION'},
    {'start': 30,  'end': 31,  'name': 'BLDG_CD_CATEGORY_CODE'},
    {'start': 31,  'end': 35,  'name': 'BLDG_CD_STATE_CODE'},
    {'start': 35,  'end': 42,  'name': 'BLDG_CD_REMASTTALLY'},
    # {'start': 42,  'end': 45,  'name': 'BLDG_CD_NEW_BUILDING_CODE'},
    # {'start': 45,  'end': 48,  'name': 'BLDG_CD_RESERVED_BUILDING_CODE'},
]

OFF_PROPERTY_LAYOUT = [
    {'start': 0,    'end': 9,   'name': 'OPARCEL'},
    {'start': 9,    'end': 34,  'name': 'OCAREOF'},
    {'start': 34,   'end': 59,  'name': 'O1STADD'},
    {'start': 59,   'end': 84,  'name': 'O2NDADD'},
    {'start': 84,   'end': 109, 'name': 'OSTNAME'},
    {'start': 109,  'end': 134, 'name': 'OCITYST'},
    {'start': 134,  'end': 143, 'name': 'OZIP'},
    # OFILL
]

STREET_CODES_LAYOUT = [
    {'start': 0,   'end': 15,  'name': 'STNAME'},
    {'start': 15,  'end': 16,  'name': 'DIR'},
    {'start': 16,  'end': 19,  'name': 'DSG'},
    {'start': 19,  'end': 25,  'name': 'STCODE'},
    # {'start': 25,  'end': 27,  'name': 'ST_CD_UNKNOWN_FIELD'},
    # {'start': 27,  'end': 177, 'name': 'ST_CD_RELOC'},
]

ASSESSMENT_HISTORY_LAYOUT = [
    {'start': 0,    'end': 5,    'name': 'STREET_CODE'},
    {'start': 5,    'end': 10,   'name': 'HOUSE_NUMBER'},
    {'start': 10,   'end': 11,   'name': 'SUFFIX'},
    {'start': 11,   'end': 18,   'name': 'UNIT_NUMBER'},
    {'start': 18,   'end': 20,   'name': 'CERT_YEAR'},
    {'start': 20,   'end': 29,   'name': 'ACCOUNT_NUMBER'},
    {'start': 41,   'end': 42,   'name': 'ACTION_CODE'},
    {'start': 229,  'end': 238,  'name': 'CERTIFIED_TAXABLE_LAND'},
    {'start': 238,  'end': 247,  'name': 'CERTIFIED_TAXABLE_BUILD'},
    {'start': 247,  'end': 256,  'name': 'CERTIFIED_EXEMPT_LAND'},
    {'start': 256,  'end': 265,  'name': 'CERTIFIED_EXEMPT_BUILDING'},
    {'start': 265,  'end': 276,  'name': 'MARKET_VALUE'},
]
