@cityssm/mpac-yetf
Version:
Parses the MPAC Year-End Tax File (YETF) into a usable object.
228 lines (227 loc) • 10.2 kB
JavaScript
function parseAA(recordAA, recordString) {
recordAA.ward = recordString.slice(21, 23).trim();
recordAA.poll = recordString.slice(23, 26).trim();
recordAA.pollSuffix = recordString.slice(26, 27).trim();
recordAA.highSchoolCode = recordString.slice(27, 29).trim();
recordAA.publicSchoolCode = recordString.slice(29, 31).trim();
recordAA.separateSchoolCode = recordString.slice(31, 33).trim();
recordAA.specialRateArea = recordString.slice(33, 39).trim();
recordAA.pacCode = recordString.slice(39, 42).trim();
recordAA.previousRollNumber = recordString.slice(48, 67).trim();
recordAA.frenchPublicSchoolCode = recordString.slice(67, 69).trim();
recordAA.frenchSeparateSchoolCode = recordString.slice(69, 71).trim();
}
function parseBB(recordBB, recordString) {
recordBB.frontage =
recordString.slice(21, 25).trim() + '.' + recordString.slice(25, 27).trim();
recordBB.siteArea =
recordString.slice(27, 32).trim() + '.' + recordString.slice(32, 34).trim();
recordBB.unitOfMeasurement = recordString.slice(34, 35).trim();
recordBB.depth =
recordString.slice(35, 38).trim() + '.' + recordString.slice(38, 40).trim();
recordBB.siteImprovement = recordString.slice(40, 42).trim();
recordBB.propertyCode = recordString.slice(42, 45).trim();
recordBB.zoningUFFI = recordString.slice(45, 52).trim();
recordBB.services = recordString.slice(52, 53).trim();
recordBB.access = recordString.slice(53, 54).trim();
}
function parseCC(recordCC, recordString) {
recordCC.sequenceNumber = recordString.slice(21, 22).trim();
recordCC.characterOfConstruction = recordString.slice(24, 27).trim();
recordCC.quality =
recordString.slice(27, 29) + '.' + recordString.slice(29, 30).trim();
recordCC.shape = recordString.slice(30, 31).trim();
recordCC.yearBuilt = recordString.slice(31, 35).trim();
recordCC.yearBuiltCode = recordString.slice(35, 36).trim();
recordCC.condition = recordString.slice(36, 37).trim();
recordCC.fullStoreys = recordString.slice(37, 39).trim();
recordCC.partStoreys = recordString.slice(39, 40).trim();
recordCC.heightEffectiveYearBuilt = recordString.slice(40, 44).trim();
recordCC.split = recordString.slice(44, 45).trim();
recordCC.grossArea = recordString.slice(45, 51).trim();
recordCC.totalBasementArea = recordString.slice(51, 55).trim();
recordCC.finishedBasementArea = recordString.slice(55, 59).trim();
recordCC.basementFinish = recordString.slice(59, 60).trim();
recordCC.fullBaths = recordString.slice(60, 61).trim();
recordCC.halfBaths = recordString.slice(61, 62).trim();
recordCC.numberOfBedrooms = recordString.slice(62, 64).trim();
recordCC.numberOfFireplaces = recordString.slice(64, 65).trim();
recordCC.heatingType = recordString.slice(65, 67).trim();
recordCC.airConditioning = recordString.slice(67, 68).trim();
recordCC.garageType = recordString.slice(68, 69).trim();
recordCC.garageSpaces = recordString.slice(69, 72).trim();
recordCC.structureCode = recordString.slice(72, 75).trim();
}
function parseDD(recordDD, recordString) {
recordDD.sequenceNumber = recordString.slice(21, 22).trim();
recordDD.acres =
recordString.slice(22, 26).trim() + '.' + recordString.slice(26, 28).trim();
recordDD.texture = recordString.slice(28, 29).trim();
recordDD.soilClass = recordString.slice(29, 30).trim();
recordDD.tiling = recordString.slice(30, 31).trim();
recordDD.climaticZone = recordString.slice(31, 32).trim();
recordDD.woodedAcreage =
recordString.slice(32, 36).trim() + '.' + recordString.slice(36, 38).trim();
recordDD.orchardAcreage =
recordString.slice(43, 47).trim() + '.' + recordString.slice(47, 49).trim();
}
function parseGG(recordGG, recordString) {
recordGG.sequenceNumber = recordString.slice(22, 25).trim();
recordGG.name = recordString.slice(25, 53).trim();
recordGG.identifier = recordString.slice(53, 54).trim();
recordGG.occupancyStatus = recordString.slice(54, 55).trim();
recordGG.religion = recordString.slice(55, 56).trim();
recordGG.schoolSupport = recordString.slice(56, 57).trim();
recordGG.residencyCode = recordString.slice(57, 58).trim();
recordGG.citizenship = recordString.slice(58, 59).trim();
recordGG.designatedRatepayerCode = recordString.slice(59, 60).trim();
recordGG.yearOfBirth = recordString.slice(60, 64).trim();
recordGG.monthOfBirth = recordString.slice(64, 66).trim();
recordGG.frenchLanguageEducationRights = recordString.slice(68, 69).trim();
}
function parseHH(recordHH, recordString) {
recordHH.sequenceNumber = recordString.slice(21, 22).trim();
recordHH.mailingAddress = recordString.slice(22, 50).trim();
}
function parseJJ(recordJJ, recordString) {
recordJJ.cityProvinceCountry = recordString.slice(21, 42).trim();
recordJJ.postalCode = recordString.slice(42, 49).trim();
}
function parseKK(recordKK, recordString) {
recordKK.streetNumber = recordString.slice(21, 26).trim();
recordKK.upperStreetNumber = recordString.slice(26, 31).trim();
recordKK.qualifier = recordString.slice(31, 32).trim();
recordKK.streetName = recordString.slice(32, 49).trim();
recordKK.unitNumber = recordString.slice(49, 54).trim();
}
function parseLL(recordLL, recordString) {
recordLL.sequenceNumber = recordString.slice(21, 22).trim();
recordLL.legalDescription = recordString.slice(22, 50).trim();
}
function parseMM(recordMM, recordString) {
recordMM.sequenceNumber = recordString.slice(21, 22).trim();
recordMM.commentsSiteDimensions = recordString.slice(22, 50).trim();
}
function parsePA(recordPA, recordString) {
recordPA.sequenceNumber = recordString.slice(21, 22).trim();
recordPA.phaseInValue = recordString.slice(22, 32).trim();
recordPA.unitClass = recordString.slice(32, 35).trim();
recordPA.realtyTaxClass = recordString.slice(35, 36).trim();
recordPA.realtyTaxQualifier = recordString.slice(36, 37).trim();
recordPA.tenantTaxLiability = recordString.slice(54, 55).trim();
recordPA.noticeIssued = recordString.slice(55, 56).trim();
recordPA.previousYearAssessment = recordString.slice(56, 66).trim();
recordPA.unitSupport = recordString.slice(66, 67).trim();
recordPA.pooledTaxesUnit = recordString.slice(68, 69).trim();
recordPA.partnershipCode = recordString.slice(69, 70).trim();
recordPA.propertyType = recordString.slice(70, 71).trim();
recordPA.propertyTotal = recordString.slice(71, 81).trim();
recordPA.realtyPortionTotal = recordString.slice(81, 91).trim();
}
function parsePB(recordPB, recordString) {
recordPB.sequenceNumber = recordString.slice(21, 22).trim();
recordPB.realtyPortionEnglishPublic = recordString.slice(22, 32).trim();
recordPB.realtyPortionEnglishSeparate = recordString.slice(32, 42).trim();
recordPB.realtyPortionNoSupport = recordString.slice(42, 52).trim();
}
function parsePC(recordPC, recordString) {
recordPC.sequenceNumber = recordString.slice(21, 22).trim();
recordPC.realtyPortionFrenchPublic = recordString.slice(22, 32).trim();
recordPC.realtyPortionFrenchSeparate = recordString.slice(32, 42).trim();
}
function parsePD(recordPD, recordString) {
recordPD.sequenceNumber = recordString.slice(21, 22).trim();
recordPD.realtyPortionProtestantSeparate = recordString.slice(22, 32).trim();
}
function parsePI(recordPI, recordString) {
recordPI.phaseInStartingPoint = recordString.slice(21, 31).trim();
recordPI.phaseInValue = recordString.slice(31, 41).trim();
recordPI.phaseInDestinationValue = recordString.slice(41, 51).trim();
}
export function parseYetfRecordString(recordString) {
const rollNumber = recordString.slice(0, 19);
const recordType = recordString.slice(19, 21);
const record = {
rollNumber,
recordType
};
switch (recordType) {
case 'AA': {
parseAA(record, recordString);
break;
}
case 'BB': {
parseBB(record, recordString);
break;
}
case 'CC': {
parseCC(record, recordString);
break;
}
case 'DD': {
parseDD(record, recordString);
break;
}
case 'GG': {
parseGG(record, recordString);
break;
}
case 'HH': {
parseHH(record, recordString);
break;
}
case 'JJ': {
parseJJ(record, recordString);
break;
}
case 'KK': {
parseKK(record, recordString);
break;
}
case 'LL': {
parseLL(record, recordString);
break;
}
case 'MM': {
parseMM(record, recordString);
break;
}
case 'PA': {
parsePA(record, recordString);
break;
}
case 'PB': {
parsePB(record, recordString);
break;
}
case 'PC': {
parsePC(record, recordString);
break;
}
case 'PD': {
parsePD(record, recordString);
break;
}
case 'PI': {
parsePI(record, recordString);
break;
}
default: {
throw new Error(`Unknown recordType = ${recordType}`);
}
}
return record;
}
export function parseRollNumber(rollNumber) {
const parsedRollNumber = {
county: rollNumber.slice(0, 2),
municipality: rollNumber.slice(2, 4),
mapArea: rollNumber.slice(4, 6),
mapDivision: rollNumber.slice(6, 7),
mapSubdivision: rollNumber.slice(7, 10),
parcel: rollNumber.slice(10, 13),
parcelSub: rollNumber.slice(13, 15),
primarySubordinate: rollNumber.slice(15, 19)
};
return parsedRollNumber;
}