diff --git a/database/mssql/scripts/sampledata/dbo.ORBC_POWER_UNIT.Table.sql b/database/mssql/scripts/sampledata/dbo.ORBC_POWER_UNIT.Table.sql index 9fde581d5..31659ae59 100644 --- a/database/mssql/scripts/sampledata/dbo.ORBC_POWER_UNIT.Table.sql +++ b/database/mssql/scripts/sampledata/dbo.ORBC_POWER_UNIT.Table.sql @@ -103,7 +103,8 @@ INSERT [dbo].[ORBC_POWER_UNIT] ([POWER_UNIT_ID], [UNIT_NUMBER], [PLATE], [PROVIN INSERT [dbo].[ORBC_POWER_UNIT] ([POWER_UNIT_ID], [UNIT_NUMBER], [PLATE], [PROVINCE_TYPE], [YEAR], [MAKE], [VIN], [LICENSED_GVW], [POWER_UNIT_TYPE], [STEER_AXLE_TIRE_SIZE], [CONCURRENCY_CONTROL_NUMBER], [DB_CREATE_USERID], [DB_CREATE_TIMESTAMP], [DB_LAST_UPDATE_USERID], [DB_LAST_UPDATE_TIMESTAMP], [COMPANY_ID]) VALUES (99, N'9', N'F7XC0M', N'CA-BC', 2020, N'Freightliner', N'713995', CAST(18917.00 AS Numeric(18, 2)), N'CONCRET', 711, NULL, N'dbo', GETUTCDATE(), N'dbo', GETUTCDATE(), 99) INSERT [dbo].[ORBC_POWER_UNIT] ([POWER_UNIT_ID], [UNIT_NUMBER], [PLATE], [PROVINCE_TYPE], [YEAR], [MAKE], [VIN], [LICENSED_GVW], [POWER_UNIT_TYPE], [STEER_AXLE_TIRE_SIZE], [CONCURRENCY_CONTROL_NUMBER], [DB_CREATE_USERID], [DB_CREATE_TIMESTAMP], [DB_LAST_UPDATE_USERID], [DB_LAST_UPDATE_TIMESTAMP], [COMPANY_ID]) VALUES (100, N'9', N'VCUDWK', N'CA-BC', 2014, N'Hyundai', N'925292', CAST(4989.00 AS Numeric(18, 2)), N'TRKTRAC', 325, NULL, N'dbo', GETUTCDATE(), N'dbo', GETUTCDATE(), 100) - +INSERT [dbo].[ORBC_POWER_UNIT] ([POWER_UNIT_ID], [UNIT_NUMBER], [PLATE], [PROVINCE_TYPE], [YEAR], [MAKE], [VIN], [LICENSED_GVW], [POWER_UNIT_TYPE], [STEER_AXLE_TIRE_SIZE], [CONCURRENCY_CONTROL_NUMBER], [DB_CREATE_USERID], [DB_CREATE_TIMESTAMP], [DB_LAST_UPDATE_USERID], [DB_LAST_UPDATE_TIMESTAMP], [COMPANY_ID]) VALUES (101, N'LCV1', N'TTH199', N'CA-BC', 2020, N'Western Star', N'657854', CAST(20000 AS Numeric(18, 2)), N'LCVRMDB', 325, NULL, N'dbo', GETUTCDATE(), N'dbo', GETUTCDATE(), 74) +INSERT [dbo].[ORBC_POWER_UNIT] ([POWER_UNIT_ID], [UNIT_NUMBER], [PLATE], [PROVINCE_TYPE], [YEAR], [MAKE], [VIN], [LICENSED_GVW], [POWER_UNIT_TYPE], [STEER_AXLE_TIRE_SIZE], [CONCURRENCY_CONTROL_NUMBER], [DB_CREATE_USERID], [DB_CREATE_TIMESTAMP], [DB_LAST_UPDATE_USERID], [DB_LAST_UPDATE_TIMESTAMP], [COMPANY_ID]) VALUES (102, N'LCV2', N'HIU499', N'CA-BC', 2022, N'Kenworth', N'199876', CAST(22000 AS Numeric(18, 2)), N'LCVTPDB', 431, NULL, N'dbo', GETUTCDATE(), N'dbo', GETUTCDATE(), 74) SET IDENTITY_INSERT [dbo].[ORBC_POWER_UNIT] OFF GO diff --git a/database/mssql/scripts/sampledata/permit.ORBC_SPECIAL_AUTH.Table.sql b/database/mssql/scripts/sampledata/permit.ORBC_SPECIAL_AUTH.Table.sql new file mode 100644 index 000000000..b986e1bff --- /dev/null +++ b/database/mssql/scripts/sampledata/permit.ORBC_SPECIAL_AUTH.Table.sql @@ -0,0 +1,5 @@ +SET NOCOUNT ON +GO + +INSERT INTO permit.ORBC_SPECIAL_AUTH (COMPANY_ID, LCV) VALUES (74, 'Y') +GO \ No newline at end of file diff --git a/database/mssql/scripts/utility/refresh-sample-data.sh b/database/mssql/scripts/utility/refresh-sample-data.sh index c16e10e9d..bcafd9498 100644 --- a/database/mssql/scripts/utility/refresh-sample-data.sh +++ b/database/mssql/scripts/utility/refresh-sample-data.sh @@ -6,6 +6,7 @@ USAGE="-u ORBC_USER -p ORBC_PASS -s ORBC_SERVER -d ORBC_DATABASE" parse_options "${USAGE}" ${@} echo "Deleting existing sample data" +sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -Q "SET QUOTED_IDENTIFIER ON; SET NOCOUNT ON; DELETE FROM permit.ORBC_SPECIAL_AUTH" sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -Q "SET QUOTED_IDENTIFIER ON; SET NOCOUNT ON; DELETE FROM dbo.ORBC_FEATURE_FLAG" sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -Q "SET QUOTED_IDENTIFIER ON; SET NOCOUNT ON; DELETE FROM dbo.ORBC_TRAILER" sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -Q "SET QUOTED_IDENTIFIER ON; SET NOCOUNT ON; DELETE FROM dbo.ORBC_POWER_UNIT" @@ -25,6 +26,7 @@ sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -i ${SCRIPT_DIR}/sampledata/dbo.ORBC_POWER_UNIT.Table.sql sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -i ${SCRIPT_DIR}/sampledata/dbo.ORBC_TRAILER.Table.sql sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -i ${SCRIPT_DIR}/sampledata/dbo.ORBC_FEATURE_FLAG.Table.sql +sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -i ${SCRIPT_DIR}/sampledata/permit.ORBC_SPECIAL_AUTH.Table.sql echo "Setting credit account sequence restart to current timestamp (used only for lower environments)" sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -i ${SCRIPT_DIR}/sampledata/permit.ORBC_CREDIT_ACCOUNT_NUMBER_SEQ.sql diff --git a/database/mssql/scripts/versions/revert/v_55_ddl_revert.sql b/database/mssql/scripts/versions/revert/v_55_ddl_revert.sql new file mode 100644 index 000000000..2d9e08c79 --- /dev/null +++ b/database/mssql/scripts/versions/revert/v_55_ddl_revert.sql @@ -0,0 +1,43 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET NOCOUNT ON +GO +SET XACT_ABORT ON +GO +SET TRANSACTION ISOLATION LEVEL SERIALIZABLE +GO +BEGIN TRANSACTION +GO + +-- Remove the newly added policy configuration +DELETE FROM [dbo].[ORBC_POLICY_CONFIGURATION] +WHERE POLICY_CONFIGURATION_ID = (SELECT MAX(POLICY_CONFIGURATION_ID) FROM [dbo].[ORBC_POLICY_CONFIGURATION]) +GO + +IF @@ERROR <> 0 SET NOEXEC ON +GO + +DECLARE @VersionDescription VARCHAR(255) +SET @VersionDescription = 'Reverting updates to policy configuration JSON allowing lcv vehicles for TROS and TROW' + +INSERT [dbo].[ORBC_SYS_VERSION] ([VERSION_ID], [DESCRIPTION], [RELEASE_DATE]) VALUES (54, @VersionDescription, getutcdate()) +GO + +IF @@ERROR <> 0 SET NOEXEC ON +GO + +COMMIT TRANSACTION +GO +IF @@ERROR <> 0 SET NOEXEC ON +GO +DECLARE @Success AS BIT +SET @Success = 1 +SET NOEXEC OFF +IF (@Success = 1) PRINT 'The database revert succeeded' +ELSE BEGIN + IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION + PRINT 'The database revert failed' +END +GO \ No newline at end of file diff --git a/database/mssql/scripts/versions/v_55_ddl.sql b/database/mssql/scripts/versions/v_55_ddl.sql new file mode 100644 index 000000000..6a77539e4 --- /dev/null +++ b/database/mssql/scripts/versions/v_55_ddl.sql @@ -0,0 +1,48 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET NOCOUNT ON +GO +SET XACT_ABORT ON +GO +SET TRANSACTION ISOLATION LEVEL SERIALIZABLE +GO +BEGIN TRANSACTION +GO + +-- Insert updated configuration for LCV +INSERT [dbo].[ORBC_POLICY_CONFIGURATION] ( + EFFECTIVE_DATE, + IS_DRAFT, + CHANGE_DESCRIPTION, + ORIGIN_ID, + POLICY_JSON) +VALUES ( + CAST('2025-01-07T00:00:00' AS DATETIME), + 'N', + N'Allow lcv vehicles for term permits', + NULL, + N'{"minPEVersion":"1.1.0","geographicRegions":[{"id":"LMN","name":"Lower Mainland"},{"id":"KTN","name":"Kootenay"},{"id":"PCE","name":"Peace"}],"rangeMatrices":[{"id":"annualFeeCV","name":"Annual licensing fee for commercial vehicle","matrix":[{"min":0,"max":500,"value":42},{"min":501,"max":1000,"value":49},{"min":1001,"max":1500,"value":60},{"min":1501,"max":2000,"value":74},{"min":2001,"max":2500,"value":85},{"min":2501,"max":3000,"value":97},{"min":3001,"max":3500,"value":108},{"min":3501,"max":4000,"value":127},{"min":4001,"max":4500,"value":147},{"min":4501,"max":5000,"value":173},{"min":5001,"max":5500,"value":193},{"min":5501,"max":6000,"value":213},{"min":6001,"max":6500,"value":230},{"min":6501,"max":7000,"value":250},{"min":7001,"max":7500,"value":266},{"min":7501,"max":8000,"value":292},{"min":8001,"max":8500,"value":320},{"min":8501,"max":9000,"value":347},{"min":9001,"max":9500,"value":376},{"min":9501,"max":10000,"value":395},{"min":10001,"max":10500,"value":416},{"min":10501,"max":11000,"value":437},{"min":11001,"max":11500,"value":450},{"min":11501,"max":12000,"value":469},{"min":12001,"max":12500,"value":493},{"min":12501,"max":13000,"value":507},{"min":13001,"max":13500,"value":532},{"min":13501,"max":14000,"value":559},{"min":14001,"max":14500,"value":586},{"min":14501,"max":15000,"value":613},{"min":15001,"max":15500,"value":645},{"min":15501,"max":16000,"value":687},{"min":16001,"max":16500,"value":729},{"min":16501,"max":17000,"value":769},{"min":17001,"max":17500,"value":814},{"min":17501,"max":18000,"value":846},{"min":18001,"max":18500,"value":870},{"min":18501,"max":19000,"value":899},{"min":19001,"max":19500,"value":927},{"min":19501,"max":20000,"value":954},{"min":20001,"max":20500,"value":987},{"min":20501,"max":21000,"value":1014},{"min":21001,"max":21500,"value":1041},{"min":21501,"max":22000,"value":1068},{"min":22001,"max":22500,"value":1095},{"min":22501,"max":23000,"value":1123},{"min":23001,"max":23500,"value":1152},{"min":23501,"max":24000,"value":1182},{"min":24001,"max":24500,"value":1212},{"min":24501,"max":25000,"value":1252},{"min":25001,"max":25500,"value":1298},{"min":25501,"max":26000,"value":1340},{"min":26001,"max":26500,"value":1381},{"min":26501,"max":27000,"value":1410},{"min":27001,"max":27500,"value":1439},{"min":27501,"max":28000,"value":1465},{"min":28001,"max":28500,"value":1495},{"min":28501,"max":29000,"value":1521},{"min":29001,"max":29500,"value":1550},{"min":29501,"max":30000,"value":1581},{"min":30001,"max":31000,"value":1608},{"min":31001,"max":32000,"value":1661},{"min":32001,"max":33000,"value":1714},{"min":33001,"max":34000,"value":1769},{"min":34001,"max":35000,"value":1824},{"min":35001,"max":36000,"value":1910},{"min":36001,"max":37000,"value":2039},{"min":37001,"max":38000,"value":2110},{"min":38001,"max":39000,"value":2182},{"min":39001,"max":40000,"value":2252},{"min":40001,"max":41000,"value":2324},{"min":41001,"max":42000,"value":2398},{"min":42001,"max":43000,"value":2471},{"min":43001,"max":44000,"value":2540},{"min":44001,"max":45000,"value":2612},{"min":45001,"max":46000,"value":2718},{"min":46001,"max":47000,"value":2828},{"min":47001,"max":48000,"value":2901},{"min":48001,"max":49000,"value":2971},{"min":49001,"max":50000,"value":3044},{"min":50001,"max":51000,"value":3093},{"min":51001,"max":52000,"value":3160},{"min":52001,"max":53000,"value":3226},{"min":53001,"max":54000,"value":3291},{"min":54001,"max":55000,"value":3357},{"min":55001,"max":56000,"value":3423},{"min":56001,"max":57000,"value":3488},{"min":57001,"max":58000,"value":3553},{"min":58001,"max":59000,"value":3619},{"min":59001,"max":60000,"value":3685},{"min":60001,"max":61000,"value":3749},{"min":61001,"max":62000,"value":3815},{"min":62001,"max":63000,"value":3880},{"min":63001,"max":63500,"value":3946}]},{"id":"annualFeePassenger","name":"Annual licensing fee for commercial passenger vehicle","matrix":[{"min":0,"max":500,"value":40},{"min":501,"max":1000,"value":47},{"min":1001,"max":1500,"value":57},{"min":1501,"max":2000,"value":70},{"min":2001,"max":2500,"value":81},{"min":2501,"max":3000,"value":92},{"min":3001,"max":3500,"value":103},{"min":3501,"max":4000,"value":121},{"min":4001,"max":4500,"value":140},{"min":4501,"max":5000,"value":165},{"min":5001,"max":5500,"value":184},{"min":5501,"max":6000,"value":203},{"min":6001,"max":6500,"value":219},{"min":6501,"max":7000,"value":238},{"min":7001,"max":7500,"value":253},{"min":7501,"max":8000,"value":278},{"min":8001,"max":8500,"value":305},{"min":8501,"max":9000,"value":330},{"min":9001,"max":9500,"value":358},{"min":9501,"max":10000,"value":376},{"min":10001,"max":10500,"value":396},{"min":10501,"max":11000,"value":416},{"min":11001,"max":11500,"value":429},{"min":11501,"max":12000,"value":447},{"min":12001,"max":12500,"value":465},{"min":12501,"max":13000,"value":478},{"min":13001,"max":13500,"value":501},{"min":13501,"max":14000,"value":527},{"min":14001,"max":14500,"value":552},{"min":14501,"max":15000,"value":578},{"min":15001,"max":15500,"value":608},{"min":15501,"max":16000,"value":648},{"min":16001,"max":16500,"value":687},{"min":16501,"max":17000,"value":725},{"min":17001,"max":17500,"value":768},{"min":17501,"max":18000,"value":797},{"min":18001,"max":18500,"value":820},{"min":18501,"max":19000,"value":848},{"min":19001,"max":19500,"value":873},{"min":19501,"max":20000,"value":899},{"min":20001,"max":20500,"value":930},{"min":20501,"max":21000,"value":955},{"min":21001,"max":21500,"value":981},{"min":21501,"max":22000,"value":1007},{"min":22001,"max":22500,"value":1032},{"min":22501,"max":23000,"value":1058},{"min":23001,"max":23500,"value":1086},{"min":23501,"max":24000,"value":1114},{"min":24001,"max":24500,"value":1142},{"min":24501,"max":25000,"value":1180},{"min":25001,"max":25500,"value":1224},{"min":25501,"max":26000,"value":1263},{"min":26001,"max":26500,"value":1302},{"min":26501,"max":27000,"value":1329},{"min":27001,"max":27500,"value":1356},{"min":27501,"max":28000,"value":1381},{"min":28001,"max":28500,"value":1409},{"min":28501,"max":29000,"value":1433},{"min":29001,"max":29500,"value":1461},{"min":29501,"max":30000,"value":1490},{"min":30001,"max":31000,"value":1516},{"min":31001,"max":32000,"value":1569},{"min":32001,"max":33000,"value":1621},{"min":33001,"max":34000,"value":1676},{"min":34001,"max":35000,"value":1730},{"min":35001,"max":36000,"value":1815},{"min":36001,"max":37000,"value":1943},{"min":37001,"max":38000,"value":2013},{"min":38001,"max":39000,"value":2084},{"min":39001,"max":40000,"value":2154},{"min":40001,"max":41000,"value":2225},{"min":41001,"max":42000,"value":2298},{"min":42001,"max":43000,"value":2370},{"min":43001,"max":44000,"value":2439},{"min":44001,"max":45000,"value":2510},{"min":45001,"max":46000,"value":2615},{"min":46001,"max":47000,"value":2724},{"min":47001,"max":48000,"value":2796},{"min":48001,"max":49000,"value":2865},{"min":49001,"max":50000,"value":2937},{"min":50001,"max":51000,"value":2986},{"min":51001,"max":52000,"value":3052},{"min":52001,"max":53000,"value":3117},{"min":53001,"max":54000,"value":3182},{"min":54001,"max":55000,"value":3247},{"min":55001,"max":56000,"value":3312},{"min":56001,"max":57000,"value":3377},{"min":57001,"max":58000,"value":3441},{"min":58001,"max":59000,"value":3506},{"min":59001,"max":60000,"value":3572},{"min":60001,"max":61000,"value":3635},{"min":61001,"max":62000,"value":3700},{"min":62001,"max":63000,"value":3765},{"min":63001,"max":63500,"value":3830}]},{"id":"annualFeeIndustrial","name":"Annual licensing fee for an industrial machine","matrix":[{"min":0,"max":2000,"value":45},{"min":2001,"max":5000,"value":69},{"min":5001,"max":7000,"value":110},{"min":7001,"max":9000,"value":164},{"min":9001,"max":11000,"value":216},{"min":11001,"value":260}]},{"id":"annualFeeFarm","name":"Annual licensing fee for farm vehicle","matrix":[{"min":0,"max":500,"value":30},{"min":501,"max":1000,"value":40},{"min":1001,"max":1500,"value":47},{"min":1501,"max":2000,"value":55},{"min":2001,"max":2500,"value":77},{"min":2501,"max":3000,"value":101},{"min":3001,"max":3500,"value":142},{"min":3501,"max":4000,"value":181},{"min":4001,"max":4500,"value":207},{"min":4501,"max":5000,"value":243},{"min":5001,"max":5500,"value":278},{"min":5501,"max":6000,"value":322},{"min":6001,"max":6500,"value":355},{"min":6501,"max":7000,"value":396},{"min":7001,"max":7500,"value":427},{"min":7501,"max":8000,"value":473},{"min":8001,"max":8500,"value":524},{"min":8501,"max":9000,"value":558},{"min":9001,"max":9500,"value":596},{"min":9501,"max":10000,"value":633},{"min":10001,"max":10500,"value":669},{"min":10501,"max":11000,"value":711},{"min":11001,"max":11500,"value":744},{"min":11501,"max":12000,"value":784},{"min":12001,"max":12500,"value":824},{"min":12501,"max":13000,"value":863},{"min":13001,"max":13500,"value":883},{"min":13501,"max":14000,"value":899},{"min":14001,"max":14500,"value":919},{"min":14501,"max":15000,"value":940},{"min":15001,"max":15500,"value":960},{"min":15501,"max":16000,"value":979},{"min":16001,"max":16500,"value":997},{"min":16501,"max":17000,"value":1017},{"min":17001,"max":17500,"value":1036},{"min":17501,"max":18000,"value":1056},{"min":18001,"max":18500,"value":1076},{"min":18501,"max":19000,"value":1096},{"min":19001,"max":19500,"value":1114},{"min":19501,"max":20000,"value":1134},{"min":20001,"max":20500,"value":1154},{"min":20501,"max":21000,"value":1174},{"min":21001,"max":21500,"value":1192},{"min":21501,"max":22000,"value":1211},{"min":22001,"max":22500,"value":1231},{"min":22501,"max":23000,"value":1251},{"min":23001,"max":23500,"value":1270},{"min":23501,"max":24000,"value":1289},{"min":24001,"max":24400,"value":1309}]}],"bridgeCalculationConstants":{"minWeight":18000,"multiplier":30},"commonRules":[{"conditions":{"not":{"fact":"permitData","path":"companyName","operator":"stringMinimumLength","value":1}},"event":{"type":"violation","params":{"message":"Company is required","code":"field-validation-error","fieldReference":"permitData.companyName"}}},{"conditions":{"not":{"fact":"permitData","path":"contactDetails.firstName","operator":"stringMinimumLength","value":1}},"event":{"type":"violation","params":{"message":"Contact first name is required","code":"field-validation-error","fieldReference":"permitData.contactDetails.firstName"}}},{"conditions":{"not":{"fact":"permitData","path":"contactDetails.lastName","operator":"stringMinimumLength","value":1}},"event":{"type":"violation","params":{"message":"Contact last name is required","code":"field-validation-error","fieldReference":"permitData.contactDetails.lastName"}}},{"conditions":{"not":{"fact":"permitData","path":"contactDetails.phone1","operator":"stringMinimumLength","value":1}},"event":{"type":"violation","params":{"message":"Contact phone number is required","code":"field-validation-error","fieldReference":"permitData.contactDetails.phone1"}}},{"conditions":{"not":{"fact":"permitData","path":"contactDetails.email","operator":"stringMinimumLength","value":1}},"event":{"type":"violation","params":{"message":"Company contact email is required","code":"field-validation-error","fieldReference":"permitData.contactDetails.email"}}},{"conditions":{"any":[{"fact":"permitData","path":"$.startDate","operator":"dateLessThan","value":{"fact":"validationDate"}}]},"event":{"type":"violation","params":{"message":"Permit start date cannot be in the past","code":"field-validation-error","fieldReference":"permitData.startDate"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.vin","operator":"regex","value":"^[a-zA-Z0-9]{6}$"}},"event":{"type":"violation","params":{"message":"Vehicle Identification Number (vin) must be 6 alphanumeric characters","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.vin"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.plate","operator":"stringMinimumLength","value":1}},"event":{"type":"violation","params":{"message":"Vehicle plate is required","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.plate"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.make","operator":"stringMinimumLength","value":1}},"event":{"type":"violation","params":{"message":"Vehicle make is required","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.make"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.year","operator":"greaterThan","value":1900}},"event":{"type":"violation","params":{"message":"Vehicle year is required","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.year"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.countryCode","operator":"stringMinimumLength","value":1}},"event":{"type":"violation","params":{"message":"Vehicle country of registration is required","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.countryCode"}}}],"permitTypes":[{"id":"TROS","name":"Term Oversize","routingRequired":false,"weightDimensionRequired":false,"sizeDimensionRequired":false,"commodityRequired":false,"allowedVehicles":["BOOSTER","DOLLIES","EXPANDO","FEBGHSE","FECVYER","FEDRMMX","FEPNYTR","FESEMTR","FEWHELR","FLOATTR","FULLLTL","HIBOEXP","HIBOFLT","JEEPSRG","LCVTPDB","LCVRMDB","LOGDGLG","LOGFULL","LOGNTAC","LOGOWBK","LOGSMEM","LOGTNDM","LOGTRIX","ODTRLEX","OGOSFDT","PLATFRM","POLETRL","PONYTRL","REDIMIX","SEMITRL","STBTRAN","STCHIPS","STCRANE","STINGAT","STLOGNG","STNTSHC","STREEFR","STSDBDK","STSTNGR","STWHELR","STWIDWH","BUSTRLR","CONCRET","DDCKBUS","GRADERS","LOGGING","LOGOFFH","LWBTRCT","OGBEDTK","OGOILSW","PICKRTT","PLOWBLD","REGTRCK","STINGER","TOWVEHC","TRKTRAC"],"rules":[{"conditions":{"all":[{"not":{"fact":"permitData","path":"permitDuration","operator":"in","value":[30,60,90,120,150,180,210,240,270,300,330]}},{"not":{"fact":"permitData","path":"permitDuration","operator":"equal","value":{"fact":"daysInPermitYear"}}}]},"event":{"type":"violation","params":{"message":"Duration must be in 30 day increments or a full year","code":"field-validation-error","fieldReference":"permitData.permitDuration"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.vehicleSubType","operator":"in","value":{"fact":"allowedVehicles"}}},"event":{"type":"violation","params":{"message":"Vehicle type not permittable for this permit type","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.vehicleSubType"}}}],"costRules":[{"fact":"costPerMonth","params":{"cost":30}}]},{"id":"TROW","name":"Term Overweight","routingRequired":false,"weightDimensionRequired":false,"sizeDimensionRequired":false,"commodityRequired":false,"allowedVehicles":["DOLLIES","FEBGHSE","FECVYER","FEDRMMX","FEPNYTR","FESEMTR","FEWHELR","REDIMIX","CONCRET","CRAFTAT","CRAFTMB","GRADERS","LCVTPDB","LCVRMDB","MUNFITR","OGOILSW","OGSERVC","OGSRRAH","PICKRTT","TOWVEHC"],"rules":[{"conditions":{"all":[{"not":{"fact":"permitData","path":"permitDuration","operator":"in","value":[30,60,90,120,150,180,210,240,270,300,330]}},{"not":{"fact":"permitData","path":"permitDuration","operator":"equal","value":{"fact":"daysInPermitYear"}}}]},"event":{"type":"violation","params":{"message":"Duration must be in 30 day increments or a full year","code":"field-validation-error","fieldReference":"permitData.permitDuration"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.vehicleSubType","operator":"in","value":{"fact":"allowedVehicles"}}},"event":{"type":"violation","params":{"message":"Vehicle type not permittable for this permit type","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.vehicleSubType"}}}],"costRules":[{"fact":"costPerMonth","params":{"cost":100}}]},{"id":"STOS","name":"Single Trip Oversize","routingRequired":true,"weightDimensionRequired":false,"sizeDimensionRequired":true,"commodityRequired":true,"rules":[{"conditions":{"any":[{"not":{"fact":"permitData","path":"permitDuration","operator":"lessThanInclusive","value":7}},{"not":{"fact":"permitData","path":"permitDuration","operator":"greaterThan","value":0}}]},"event":{"type":"violation","params":{"message":"Duration must be 7 days or less","code":"field-validation-error","fieldReference":"permitData.permitDuration"}}},{"conditions":{"not":{"fact":"configurationIsValid","operator":"equal","value":true}},"event":{"type":"violation","params":{"message":"Vehicle configuration is not permittable for this commodity","code":"field-validation-error","fieldReference":"permitData.vehicleConfiguration.trailers"}}},{"conditions":{"not":{"fact":"permitData","path":"permittedCommodity.loadDescription","operator":"stringMinimumLength","value":1}},"event":{"type":"violation","params":{"message":"Commodity load description is required","code":"field-validation-error","fieldReference":"permitData.permittedCommodity.loadDescription"}}}],"costRules":[{"fact":"fixedCost","params":{"cost":15}}]},{"id":"STFR","name":"Single Trip ICBC Basic Insurance (FR)","routingRequired":false,"weightDimensionRequired":false,"sizeDimensionRequired":false,"commodityRequired":false,"allowedVehicles":["BUSCRUM","BUSTRLR","CONCRET","CRAFTAT","CRAFTMB","DDCKBUS","FARMVEH","GRADERS","LCVRMDB","LCVTPDB","LOGGING","LOGOFFH","LWBTRCT","MUNFITR","OGBEDTK","OGOILSW","OGSERVC","OGSRRAH","PICKRTT","PLOWBLD","PUTAXIS","REGTRCK","SCRAPER","SPAUTHV","STINGER","TOWVEHC","TRKTRAC"],"rules":[{"conditions":{"any":[{"not":{"fact":"permitData","path":"permitDuration","operator":"lessThanInclusive","value":30}},{"not":{"fact":"permitData","path":"permitDuration","operator":"greaterThan","value":0}}]},"event":{"type":"violation","params":{"message":"Duration must be 30 days or less","code":"field-validation-error","fieldReference":"permitData.permitDuration"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.licensedGVW","operator":"greaterThan","value":0}},"event":{"type":"violation","params":{"message":"Licensed GVW must be greater than zero","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.licensedGVW"}}},{"conditions":{"all":[{"fact":"permitData","path":"vehicleDetails.licensedGVW","operator":"greaterThan","value":63500}]},"event":{"type":"violation","params":{"message":"Licensed GVW may not exceed 63,500 kg","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.licensedGVW"}}},{"conditions":{"all":[{"fact":"permitData","path":"vehicleDetails.countryCode","operator":"equal","value":"CA"},{"fact":"permitData","path":"vehicleDetails.provinceCode","operator":"equal","value":"BC"}]},"event":{"type":"violation","params":{"message":"BC plated vehicles do not require this permit","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.provinceCode"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.vehicleSubType","operator":"in","value":{"fact":"allowedVehicles"}}},"event":{"type":"violation","params":{"message":"Vehicle type not permittable for this permit type","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.vehicleSubType"}}},{"conditions":{"not":{"fact":"permitData","path":"thirdPartyLiability","operator":"in","value":["GENERAL_GOODS","DANGEROUS_GOODS"]}},"event":{"type":"violation","params":{"message":"Third party liability is invalid","code":"field-validation-error","fieldReference":"permitData.thirdPartyLiability"}}}],"costRules":[{"fact":"fixedCost","params":{"cost":84}},{"fact":"conditionalFixedCost","params":{"cost":5,"fact":"thirdPartyLiability","value":"DANGEROUS_GOODS"}}]},{"id":"QRFR","name":"Quarterly ICBC Basic Insurance (FR)","routingRequired":false,"weightDimensionRequired":false,"sizeDimensionRequired":false,"commodityRequired":false,"allowedVehicles":["BUSCRUM","BUSTRLR","CONCRET","CRAFTAT","CRAFTMB","DDCKBUS","FARMVEH","GRADERS","LCVRMDB","LCVTPDB","LOGGING","LOGOFFH","LWBTRCT","MUNFITR","OGBEDTK","OGOILSW","OGSERVC","OGSRRAH","PICKRTT","PLOWBLD","PUTAXIS","REGTRCK","SCRAPER","SPAUTHV","STINGER","TOWVEHC","TRKTRAC"],"rules":[{"conditions":{"not":{"fact":"permitData","path":"expiryDate","operator":"equal","value":{"fact":"endOfPermitQuarter"}}},"event":{"type":"violation","params":{"message":"Permit end date must be the end of the quarter in which the permit starts","code":"field-validation-error","fieldReference":"permitData.expiryDate"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.licensedGVW","operator":"greaterThan","value":0}},"event":{"type":"violation","params":{"message":"Licensed GVW must be greater than zero","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.licensedGVW"}}},{"conditions":{"all":[{"fact":"permitData","path":"vehicleDetails.licensedGVW","operator":"greaterThan","value":63500}]},"event":{"type":"violation","params":{"message":"Licensed GVW may not exceed 63,500 kg","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.licensedGVW"}}},{"conditions":{"all":[{"fact":"permitData","path":"vehicleDetails.countryCode","operator":"equal","value":"CA"},{"fact":"permitData","path":"vehicleDetails.provinceCode","operator":"equal","value":"BC"}]},"event":{"type":"violation","params":{"message":"BC plated vehicles do not require this permit","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.provinceCode"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.vehicleSubType","operator":"in","value":{"fact":"allowedVehicles"}}},"event":{"type":"violation","params":{"message":"Vehicle type not permittable for this permit type","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.vehicleSubType"}}},{"conditions":{"not":{"fact":"permitData","operator":"in","value":["GENERAL_GOODS","DANGEROUS_GOODS"],"path":"thirdPartyLiability"}},"event":{"type":"violation","params":{"message":"Third party liability is invalid","code":"field-validation-error","fieldReference":"permitData.thirdPartyLiability"}}}],"costRules":[{"fact":"fixedCost","params":{"cost":843}},{"fact":"conditionalFixedCost","params":{"cost":56,"fact":"thirdPartyLiability","value":"DANGEROUS_GOODS"}}]},{"id":"MFP","name":"Motive Fuel User Permit","routingRequired":true,"weightDimensionRequired":false,"sizeDimensionRequired":false,"commodityRequired":false,"allowedVehicles":["BUSCRUM","BUSTRLR","CONCRET","CRAFTAT","CRAFTMB","DDCKBUS","GRADERS","LCVRMDB","LCVTPDB","LOGGING","LOGOFFH","LWBTRCT","OGBEDTK","OGOILSW","OGSERVC","OGSRRAH","PICKRTT","PLOWBLD","REGTRCK","SCRAPER","SPAUTHV","STINGER","TOWVEHC","TRKTRAC"],"rules":[{"conditions":{"any":[{"not":{"fact":"permitData","path":"permitDuration","operator":"lessThanInclusive","value":7}},{"not":{"fact":"permitData","path":"permitDuration","operator":"greaterThan","value":0}}]},"event":{"type":"violation","params":{"message":"Duration must be 7 days or less","code":"field-validation-error","fieldReference":"permitData.permitDuration"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.licensedGVW","operator":"greaterThan","value":0}},"event":{"type":"violation","params":{"message":"Licensed GVW must be greater than zero","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.licensedGVW"}}},{"conditions":{"all":[{"fact":"permitData","path":"vehicleDetails.licensedGVW","operator":"greaterThan","value":63500}]},"event":{"type":"violation","params":{"message":"Licensed GVW may not exceed 63,500 kg","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.licensedGVW"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.vehicleSubType","operator":"in","value":{"fact":"allowedVehicles"}}},"event":{"type":"violation","params":{"message":"Vehicle type not permittable for this permit type","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.vehicleSubType"}}},{"conditions":{"not":{"fact":"permitData","path":"permittedRoute.manualRoute.origin","operator":"stringMinimumLength","value":1}},"event":{"type":"violation","params":{"message":"Route origin is required","code":"field-validation-error","fieldReference":"permitData.permittedRoute.manualRoute.origin"}}},{"conditions":{"not":{"fact":"permitData","path":"permittedRoute.manualRoute.destination","operator":"stringMinimumLength","value":1}},"event":{"type":"violation","params":{"message":"Route destination is required","code":"field-validation-error","fieldReference":"permitData.permittedRoute.manualRoute.origin"}}},{"conditions":{"not":{"fact":"permitData","path":"permittedRoute.manualRoute.totalDistance","operator":"greaterThan","value":0}},"event":{"type":"violation","params":{"message":"Trip distance must be greater than zero","code":"field-validation-error","fieldReference":"permitData.permittedRoute.manualRoute.totalDistance"}}}],"costRules":[{"fact":"costPerKilometre","params":{"cost":0.11,"minValue":20}}]},{"id":"NRSCV","name":"Non-Resident Single Trip","routingRequired":false,"weightDimensionRequired":false,"sizeDimensionRequired":false,"commodityRequired":false,"allowedVehicles":["BUSCRUM","BUSTRLR","CONCRET","CRAFTAT","CRAFTMB","DDCKBUS","FARMVEH","GRADERS","LCVRMDB","LCVTPDB","LOGGING","LOGOFFH","LWBTRCT","MUNFITR","OGBEDTK","OGOILSW","OGSERVC","OGSRRAH","PICKRTT","PLOWBLD","PUTAXIS","REGTRCK","SCRAPER","SPAUTHV","STINGER","TOWVEHC","TRKTRAC"],"rules":[{"conditions":{"any":[{"not":{"fact":"permitData","path":"permitDuration","operator":"lessThanInclusive","value":30}},{"not":{"fact":"permitData","path":"permitDuration","operator":"greaterThan","value":0}}]},"event":{"type":"violation","params":{"message":"Duration must be 30 days or less","code":"field-validation-error","fieldReference":"permitData.permitDuration"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleConfiguration.loadedGVW","operator":"greaterThan","value":0}},"event":{"type":"violation","params":{"message":"Loaded GVW must be greater than zero","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.licensedGVW"}}},{"conditions":{"any":[{"fact":"permitData","path":"vehicleConfiguration.loadedGVW","operator":"greaterThan","value":63500},{"all":[{"fact":"permitData","path":"vehicleConfiguration.loadedGVW","operator":"greaterThan","value":24400},{"fact":"permitData","path":"conditionalLicensingFee","operator":"equal","value":"farm"}]}]},"event":{"type":"violation","params":{"message":"Loaded GVW may not exceed 63,500 kg, or 24,400 for a farm vehicle","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.licensedGVW"}}},{"conditions":{"all":[{"fact":"permitData","path":"vehicleDetails.countryCode","operator":"equal","value":"CA"},{"fact":"permitData","path":"vehicleDetails.provinceCode","operator":"equal","value":"BC"}]},"event":{"type":"violation","params":{"message":"BC plated vehicles do not require this permit","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.provinceCode"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.vehicleSubType","operator":"in","value":{"fact":"allowedVehicles"}}},"event":{"type":"violation","params":{"message":"Vehicle type not permittable for this permit type","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.vehicleSubType"}}},{"conditions":{"not":{"fact":"permitData","path":"conditionalLicensingFee","operator":"in","value":["none","conditional","x-plated","farm"]}},"event":{"type":"violation","params":{"message":"Conditional licensing selection is invalid","code":"field-validation-error","fieldReference":"permitData.conditionalLicensingFee"}}}],"costRules":[{"fact":"conditionalFixedCost","params":{"cost":1,"fact":"conditionalLicensingFee","value":"conditional"}},{"fact":"rangeMatrixCostLookup","params":{"divisor":12,"matrixMap":[{"key":"none","value":"annualFeeCV"},{"key":"x-plated","value":"annualFeeIndustrial"},{"key":"farm","value":"annualFeeFarm"}],"rangeLookupKey":"conditionalLicensingFee","matrixFactValue":"vehicleConfiguration.loadedGVW"}}]},{"id":"NRQCV","name":"Non-Resident Quarterly","routingRequired":false,"weightDimensionRequired":false,"sizeDimensionRequired":false,"commodityRequired":false,"allowedVehicles":["BUSCRUM","BUSTRLR","CONCRET","CRAFTAT","CRAFTMB","DDCKBUS","FARMVEH","GRADERS","LCVRMDB","LCVTPDB","LOGGING","LOGOFFH","LWBTRCT","MUNFITR","OGBEDTK","OGOILSW","OGSERVC","OGSRRAH","PICKRTT","PLOWBLD","PUTAXIS","REGTRCK","SCRAPER","SPAUTHV","STINGER","TOWVEHC","TRKTRAC"],"rules":[{"conditions":{"not":{"fact":"permitData","path":"expiryDate","operator":"equal","value":{"fact":"endOfPermitQuarter"}}},"event":{"type":"violation","params":{"message":"Permit end date must be the end of the quarter in which the permit starts","code":"field-validation-error","fieldReference":"permitData.expiryDate"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleConfiguration.loadedGVW","operator":"greaterThan","value":0}},"event":{"type":"violation","params":{"message":"Loaded GVW must be greater than zero","code":"field-validation-error","fieldReference":"permitData.vehicleConfiguration.loadedGVW"}}},{"conditions":{"any":[{"fact":"permitData","path":"vehicleConfiguration.loadedGVW","operator":"greaterThan","value":63500},{"all":[{"fact":"permitData","path":"vehicleConfiguration.loadedGVW","operator":"greaterThan","value":24400},{"fact":"permitData","path":"conditionalLicensingFee","operator":"equal","value":"farm"}]}]},"event":{"type":"violation","params":{"message":"Loaded GVW may not exceed 63,500 kg, or 24,400 for a farm vehicle","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.licensedGVW"}}},{"conditions":{"all":[{"fact":"permitData","path":"vehicleDetails.countryCode","operator":"equal","value":"CA"},{"fact":"permitData","path":"vehicleDetails.provinceCode","operator":"equal","value":"BC"}]},"event":{"type":"violation","params":{"message":"BC plated vehicles do not require this permit","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.provinceCode"}}},{"conditions":{"not":{"fact":"permitData","path":"vehicleDetails.vehicleSubType","operator":"in","value":{"fact":"allowedVehicles"}}},"event":{"type":"violation","params":{"message":"Vehicle type not permittable for this permit type","code":"field-validation-error","fieldReference":"permitData.vehicleDetails.vehicleSubType"}}},{"conditions":{"not":{"fact":"permitData","path":"conditionalLicensingFee","operator":"in","value":["none","conditional","x-plated","farm"]}},"event":{"type":"violation","params":{"message":"Conditional licensing fee is invalid","code":"field-validation-error","fieldReference":"permitData.conditionalLicensingFee"}}}],"costRules":[{"fact":"conditionalFixedCost","params":{"cost":3,"fact":"conditionalLicensingFee","value":"conditional"}},{"fact":"rangeMatrixCostLookup","params":{"divisor":4,"matrixMap":[{"key":"none","value":"annualFeeCV"},{"key":"x-plated","value":"annualFeeIndustrial"},{"key":"farm","value":"annualFeeFarm"}],"rangeLookupKey":"conditionalLicensingFee","matrixFactValue":"vehicleConfiguration.loadedGVW"}}]}],"globalWeightDefaults":{"powerUnits":[],"trailers":[]},"vehicleCategories":{"trailerCategories":[{"id":"trailer","name":"Default trailer category"},{"id":"accessory","name":"Accessory trailer such as jeep or booster, to be used alongside other trailers. Not permittable on its own as a trailer in a combination."},{"id":"pseudo","name":"Placeholder for a trailer in a combination with no trailer (such as when a brushcutter is permitted with no trailer)."}],"powerUnitCategories":[{"id":"powerunit","name":"Default power unit category"}]},"vehicleTypes":{"powerUnitTypes":[{"id":"BUSCRUM","name":"Buses/Crummies","category":"powerunit"},{"id":"BUSTRLR","name":"Inter-City Bus (Pulling Pony Trailer)","category":"powerunit"},{"id":"CONCRET","name":"Concrete Pumper Trucks","category":"powerunit"},{"id":"CRAFTAT","name":"Cranes, Rubber-Tired Loaders, Firetrucks - All Terrain","category":"powerunit"},{"id":"CRAFTMB","name":"Cranes, Rubber-Tired Loaders, Firetrucks - Mobile","category":"powerunit"},{"id":"DDCKBUS","name":"Double Decker Buses","category":"powerunit"},{"id":"FARMVEH","name":"Farm Vehicles","category":"powerunit"},{"id":"GRADERS","name":"Fixed Equipment - Trucks/Graders etc.","category":"powerunit"},{"id":"LCVRMDB","name":"Long Combination Vehicles (LCV) - Rocky Mountain Doubles","category":"powerunit","isLcv":true},{"id":"LCVTPDB","name":"Long Combination Vehicles (LCV) - Turnpike Doubles","category":"powerunit","isLcv":true},{"id":"LOGGING","name":"Logging Trucks","category":"powerunit"},{"id":"LOGOFFH","name":"Logging Trucks - Off-Highway","category":"powerunit"},{"id":"LWBTRCT","name":"Long Wheelbase Truck Tractors Exceeding 6.2 m up to 7.25 m","category":"powerunit"},{"id":"MUNFITR","name":"Municipal Fire Trucks","category":"powerunit"},{"id":"OGBEDTK","name":"Oil and Gas - Bed Trucks","category":"powerunit"},{"id":"OGOILSW","name":"Oil and Gas - Oilfield Sows","category":"powerunit"},{"id":"OGSERVC","name":"Oil and Gas - Service Rigs","category":"powerunit"},{"id":"OGSRRAH","name":"Oil and Gas - Service Rigs and Rathole Augers Only Equipped with Heavy Front Projected Crane (must exceed 14,000 kg tare weight)","category":"powerunit"},{"id":"PICKRTT","name":"Picker Truck Tractors","category":"powerunit"},{"id":"PLOWBLD","name":"Trucks Equipped with Front or Underbody Plow Blades","category":"powerunit"},{"id":"PUTAXIS","name":"Taxis","category":"powerunit"},{"id":"REGTRCK","name":"Trucks","category":"powerunit"},{"id":"SCRAPER","name":"Scrapers","category":"powerunit"},{"id":"SPAUTHV","name":"Specially Authorized Vehicles","category":"powerunit"},{"id":"STINGER","name":"Truck Tractors - Stinger Steered","category":"powerunit"},{"id":"TOWVEHC","name":"Tow Vehicles","category":"powerunit"},{"id":"TRKTRAC","name":"Truck Tractors","category":"powerunit"}],"trailerTypes":[{"id":"BOOSTER","name":"Boosters","category":"accessory"},{"id":"DBTRBTR","name":"Tandem/Tridem Drive B-Train (Super B-Train)","category":"trailer"},{"id":"DOLLIES","name":"Dollies","category":"trailer"},{"id":"EXPANDO","name":"Expando Semi-Trailers","category":"trailer"},{"id":"FEBGHSE","name":"Fixed Equipment - Portable Asphalt Baghouses","category":"trailer"},{"id":"FECVYER","name":"Fixed Equipment - Conveyors (Semi-Trailers)","category":"trailer"},{"id":"FECVYPT","name":"Fixed Equipment - Conveyors (Pony Trailers)","category":"trailer"},{"id":"FEDRMMX","name":"Fixed Equipment - Counter Flow Asphalt Drum Mixers","category":"trailer"},{"id":"FEPNYTR","name":"Fixed Equipment - Pony Trailers","category":"trailer"},{"id":"FESEMTR","name":"Fixed Equipment - Semi-Trailers","category":"trailer"},{"id":"FEWHELR","name":"Fixed Equipment - Wheeler Semi-Trailers","category":"wheeler"},{"id":"FLOATTR","name":"Float Trailers","category":"wheeler"},{"id":"FULLLTL","name":"Full Trailers","category":"trailer"},{"id":"HIBOEXP","name":"Semi-Trailers - Hiboys/Expandos","category":"trailer"},{"id":"HIBOFLT","name":"Semi-Trailers - Hiboys/Flat Decks","category":"trailer"},{"id":"JEEPSRG","name":"Jeeps","category":"accessory"},{"id":"LOGDGLG","name":"Legacy Logging Trailer Combinations - Tandem Pole Trailers, Dogloggers","category":"trailer"},{"id":"LOGLGCY","name":"Legacy Logging Trailer Combinations","category":"trailer"},{"id":"LOGFULL","name":"Logging Trailer - Full Trailers, Tri Axle, Quad Axle","category":"trailer"},{"id":"LOGNTAC","name":"Legacy Logging Trailer Combinations - Non-TAC B-Trains","category":"trailer"},{"id":"LOGOWBK","name":"Logging Trailer - Overwidth Bunks","category":"trailer"},{"id":"LOGSMEM","name":"Logging Semi-Trailer - Empty, 3.2 m Bunks","category":"trailer"},{"id":"LOGTNDM","name":"Legacy Logging Trailer Combinations - Single Axle Jeeps, Tandem Axle Pole Trailers, Dogloggers","category":"trailer"},{"id":"LOGTRIX","name":"Legacy Logging Trailer Combinations - Single Axle Jeeps, Tri Axle Trailers","category":"trailer"},{"id":"MHMBSHG","name":"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW) with Attached Axles","category":"trailer"},{"id":"MHMBSHL","name":"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW) with Attached Axles","category":"trailer"},{"id":"ODTRLEX","name":"Overdimensional Trailers and Semi-Trailers (For Export)","category":"trailer"},{"id":"OGOSFDT","name":"Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers","category":"trailer"},{"id":"PLATFRM","name":"Platform Trailers","category":"trailer"},{"id":"PMHWAAX","name":"Park Model Homes with Attached Axles","category":"trailer"},{"id":"POLETRL","name":"Pole Trailers","category":"trailer"},{"id":"PONYTRL","name":"Pony Trailers","category":"trailer"},{"id":"REDIMIX","name":"Ready Mix Concrete Pump Semi-Trailers","category":"trailer"},{"id":"SEMITRL","name":"Semi-Trailers","category":"trailer"},{"id":"STACTRN","name":"Semi-Trailers - A-Trains and C-Trains","category":"trailer"},{"id":"STBTRAN","name":"Semi-Trailers - B-Trains","category":"trailer"},{"id":"STCHIPS","name":"Semi-Trailers - Walled B-Trains (Chip Trucks)","category":"trailer"},{"id":"STCRANE","name":"Semi-Trailers with Crane","category":"trailer"},{"id":"STINGAT","name":"Stinger Steered Automobile Transporters","category":"trailer"},{"id":"STLOGNG","name":"Semi-Trailers - Logging","category":"trailer"},{"id":"STNTSHC","name":"Semi-Trailers - Non-Tac Short Chassis","category":"trailer"},{"id":"STREEFR","name":"Semi-Trailers - Insulated Vans with Reefer/Refrigeration Units","category":"trailer"},{"id":"STROPRT","name":"Steering Trailers - Manned","category":"trailer"},{"id":"STRSELF","name":"Steering Trailers - Self/Remote","category":"trailer"},{"id":"STSDBDK","name":"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.","category":"trailer"},{"id":"STSTEER","name":"Semi-Trailers - Steering Trailers","category":"trailer"},{"id":"STSTNGR","name":"Semi-Trailers - Stinger Steered Automobile Transporters","category":"trailer"},{"id":"STWDTAN","name":"Semi-Trailers - Spread Tandems","category":"trailer"},{"id":"STWHELR","name":"Semi-Trailers - Wheelers","category":"trailer"},{"id":"STWIDWH","name":"Semi-Trailers - Wide Wheelers","category":"trailer"},{"id":"NONEXXX","name":"None","category":"pseudo"}]},"commodities":[{"id":"NONEXXX","name":"None","size":{"powerUnits":[{"type":"CONCRET","trailers":[{"type":"NONEXXX","jeep":false,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":15.5}]}]},{"type":"CRAFTAT","trailers":[{"type":"DOLLIES","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":10,"rp":6.5,"w":3.8,"h":4.3,"l":25}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":10,"rp":6.5,"w":3.8,"h":4.3,"l":14,"regions":[{"region":"PCE","l":15}]}]}]},{"type":"CRAFTMB","trailers":[{"type":"DOLLIES","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":10,"rp":6.5,"w":3.8,"h":4.3,"l":25}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":10,"rp":6.5,"w":3.8,"h":4.3,"l":14,"regions":[{"region":"PCE","l":15}]}]}]},{"type":"DDCKBUS","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.42,"l":12.5,"regions":[{"region":"LMN","h":4.3},{"region":"KTN","h":4.3},{"region":"PCE","h":4.3}]}]}]},{"type":"GRADERS","trailers":[{"type":"FEPNYTR","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":4,"w":3.2,"h":4.3,"l":31}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":1,"w":3.5,"h":4.4,"l":12.5,"regions":[{"region":"LMN","h":4.3},{"region":"KTN","h":4.3},{"region":"PCE","h":5.33}]}]}]},{"type":"BUSTRLR","trailers":[{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.15,"l":20}]}]},{"type":"LOGOFFH","trailers":[{"type":"STLOGNG","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":4.4,"h":4.15,"l":23}]}]},{"type":"LCVRMDB","trailers":[{"type":"SEMITRL","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.15,"l":32,"regions":[{"region":"PCE","l":31}]}]}]},{"type":"LCVTPDB","trailers":[{"type":"SEMITRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.15,"l":41}]}]},{"type":"LWBTRCT","trailers":[{"type":"SEMITRL","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.15,"l":23}]}]},{"type":"PICKRTT","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":1,"w":2.6,"h":4.15,"l":16}]},{"type":"STCRANE","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":25}]},{"type":"STROPRT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":40,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STRSELF","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":36,"regions":[{"region":"PCE","h":5.33}]}]}]},{"type":"SCRAPER","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.15,"l":12.5}]}]},{"type":"TRKTRAC","trailers":[{"type":"FECVYER","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":4,"rp":9.5,"w":3.8,"h":4.72,"l":31,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"FEDRMMX","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.8,"h":4.72,"l":31,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"FEBGHSE","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":4.26,"h":4.72,"l":31,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"FESEMTR","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.8,"h":4.72,"l":31,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"FEWHELR","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":31,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"ODTRLEX","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":1,"w":3.65,"h":4.15,"l":23}]},{"type":"REDIMIX","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":23}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.3,"l":31,"regions":[{"region":"LMN","l":23},{"region":"KTN","l":23},{"region":"PCE","h":5.33}]}]},{"type":"STREEFR","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.3,"l":23}]},{"type":"STNTSHC","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":5,"rp":2.25,"w":2.6,"h":4.15,"l":20}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","l":32}]}]},{"type":"STROPRT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.15,"l":40}]},{"type":"STRSELF","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.15,"l":36}]}]},{"type":"REGTRCK","trailers":[{"type":"FECVYPT","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":4,"rp":9.5,"w":3.2,"h":4.3,"l":31}]},{"type":"FEPNYTR","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":4,"w":3.2,"h":4.3,"l":31}]},{"type":"FULLLTL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.5,"w":3.8,"h":4.3,"l":23,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"MHMBSHL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.9,"w":5,"h":4.88,"l":31.5,"regions":[{"region":"PCE","h":5.33,"l":36}]}]},{"type":"MHMBSHG","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.9,"w":6,"h":4.88,"l":31.5,"regions":[{"region":"PCE","w":6.1,"h":5.33,"l":36}]}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.5,"w":3.2,"h":4.3,"l":16,"regions":[{"region":"PCE","h":4.4}]}]},{"type":"ODTRLEX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.65,"h":4.15,"l":23}]},{"type":"PMHWAAX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.9,"w":4.4,"h":4.88,"l":31.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.5,"w":3.2,"h":4.3,"l":23,"regions":[{"region":"PCE","h":5.33}]}]}]},{"type":"PLOWBLD","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.2,"h":4.15,"l":12.5}]}]}]}},{"id":"DOGLOGG","name":"Doglogger/Sjostrum Trailers (decked)","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":5,"w":2.6,"h":4.15,"l":13.5}]}]}]}},{"id":"GRTBBUK","name":"Grader, Tractor Blades, Buckets","size":{"powerUnits":[{"type":"GRADERS","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":0,"rp":0,"w":4.4,"h":4.15,"l":12.5}]}]}]}},{"id":"HAYRACK","name":"Hayrack Semi-Trailer with a Folded Chassis/Empty Piggyback","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"STLOGNG","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":5,"w":2.6,"h":4.15,"l":23}]}]}]}},{"id":"IMCONTN","name":"Intermodal Containers","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"STACTRN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.4,"l":26}]},{"type":"STBTRAN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.4,"l":27.5}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.4,"l":23}]}]},{"type":"REGTRCK","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.4,"l":12.5}]}]}]}},{"id":"IMCONWS","name":"Intermodal Containers without Sides","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":4.4,"h":4.72,"l":23}]}]}]}},{"id":"LPBOOMS","name":"Logs, Poles And Boomsticks (Up To 20.1)","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"FULLLTL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.9,"h":4.15,"l":27.5}]},{"type":"LOGLGCY","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":5,"w":2.6,"h":4.15,"l":25}]},{"type":"POLETRL","jeep":true,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.9,"h":4.15,"l":27.5}]},{"type":"STACTRN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.9,"h":4.15,"l":26}]},{"type":"STBTRAN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.9,"h":4.15,"l":27.5}]},{"type":"HIBOFLT","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.9,"h":4.15,"l":25}]},{"type":"STLOGNG","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.9,"h":4.15,"l":25}]}]}]}},{"id":"LPBOOML","name":"Logs, Poles And Boomsticks (Over 20.1)","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"LOGFULL","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":10,"rp":10,"w":2.6,"h":4.15,"l":40}]},{"type":"POLETRL","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":8,"rp":9,"w":2.6,"h":4.15,"l":40}]},{"type":"STROPRT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":10,"rp":10,"w":2.6,"h":4.15,"l":40}]},{"type":"STRSELF","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":10,"rp":10,"w":2.6,"h":4.15,"l":36}]}]}]}},{"id":"MFHOMES","name":"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"SEMITRL","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":7.5,"w":5,"h":4.88,"l":31.5,"regions":[{"region":"PCE","h":5.33,"l":36}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":7.5,"w":5,"h":4.88,"l":31.5,"regions":[{"region":"PCE","h":5.33,"l":36}]}]}]},{"type":"REGTRCK","trailers":[{"type":"DOLLIES","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":6.9,"w":5,"h":4.88,"l":31.5,"regions":[{"region":"PCE","h":5.33,"l":36}]}]},{"type":"FLOATTR","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":6.9,"w":5,"h":4.57,"l":31.5,"regions":[{"region":"PCE","h":5.33,"l":36}]}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":6.9,"w":5,"h":4.88,"l":31.5,"regions":[{"region":"PCE","h":5.33,"l":36}]}]}]}]}},{"id":"MFHOMEL","name":"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"SEMITRL","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":7.5,"w":6,"h":4.88,"l":31.5,"regions":[{"region":"PCE","w":6.1,"h":5.33,"l":36}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":7.5,"w":6,"h":4.88,"l":31.5,"regions":[{"region":"PCE","w":6.1,"h":5.33,"l":36}]}]}]},{"type":"REGTRCK","trailers":[{"type":"DOLLIES","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":6.9,"w":6,"h":4.88,"l":31.5,"regions":[{"region":"PCE","w":6.1,"h":5.33,"l":36}]}]},{"type":"FLOATTR","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":6.9,"w":6,"h":4.57,"l":31.5,"regions":[{"region":"PCE","w":6.1,"h":5.33,"l":36}]}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":6.9,"w":6,"h":4.88,"l":31.5,"regions":[{"region":"PCE","w":6.1,"h":5.33,"l":36}]}]}]}]}},{"id":"PARKMHS","name":"Park Model Homes","size":{"powerUnits":[{"type":"REGTRCK","trailers":[{"type":"DOLLIES","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.9,"w":4.4,"h":4.88,"l":31.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"FLOATTR","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.9,"w":4.4,"h":4.88,"l":31.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.9,"w":4.4,"h":4.88,"l":31.5,"regions":[{"region":"PCE","h":5.33}]}]}]}]}},{"id":"PIPESTL","name":"Pipe And Steel Products (Rebar, Pilings, Reinforcing Steel, Etc.)","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"HIBOEXP","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":31}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5}]},{"type":"STSTEER","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":36}]},{"type":"STROPRT","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":40}]}]}]}},{"id":"REDUCBL","name":"Reducible Loads","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"STLOGNG","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.15,"l":27.5}]},{"type":"PLATFRM","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"SEMITRL","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STACTRN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":26,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STBTRAN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"HIBOEXP","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STSTEER","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STWHELR","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STWIDWH","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STCRANE","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STROPRT","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":40,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STRSELF","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":36,"regions":[{"region":"PCE","h":5.33}]}]}]},{"type":"PICKRTT","trailers":[{"type":"SEMITRL","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"HIBOEXP","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]}]},{"type":"STINGER","trailers":[{"type":"SEMITRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1.2,"w":2.6,"h":4.3,"l":25,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STSTNGR","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1.2,"w":2.6,"h":4.3,"l":25,"regions":[{"region":"PCE","h":5.33}]}]}]},{"type":"REGTRCK","trailers":[{"type":"DOLLIES","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.5,"w":3.2,"h":4.3,"l":25,"regions":[{"region":"PCE","h":4.4}]}]},{"type":"FULLLTL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.5,"w":3.2,"h":4.3,"l":25,"regions":[{"region":"PCE","h":4.4}]}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.5,"w":3.2,"h":4.3,"l":16,"regions":[{"region":"PCE","h":4.4}]}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.5,"w":3.2,"h":4.3,"l":25,"regions":[{"region":"PCE","h":4.4}]}]}]}]}},{"id":"SCRAPER","name":"Scraper on Dollies","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"DOLLIES","jeep":true,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":1,"w":3.2,"h":4.3,"l":25,"regions":[{"region":"PCE","h":4.4}]}]}]}]}},{"id":"OILFILD","name":"Oil Field Equipment","size":{"powerUnits":[{"type":"OGBEDTK","trailers":[{"type":"EXPANDO","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.3,"l":27.5}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":5,"w":3.3,"h":4.3,"l":14}]},{"type":"OGOSFDT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.3,"h":4.3,"l":23}]}]},{"type":"OGOILSW","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":5,"w":3.2,"h":4.3,"l":15}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":25}]}]},{"type":"OGSERVC","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":10,"rp":6.5,"w":3.8,"h":4.3,"l":15}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":10,"rp":6.5,"w":3.8,"h":4.3,"l":23}]}]},{"type":"OGSRRAH","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":10,"rp":6.5,"w":2.9,"h":4.15,"l":15.5}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":10,"rp":6.5,"w":2.9,"h":4.15,"l":23}]}]},{"type":"TRKTRAC","trailers":[{"type":"OGOSFDT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.3,"h":4.3,"l":23}]}]}]}},{"id":"JPTRLOG","name":"Tandem Jeep/Pole Trailer Loaded on Logging Truck","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":5,"w":2.9,"h":4.3,"l":12.5}]}]},{"type":"REGTRCK","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":5,"w":2.9,"h":4.3,"l":12.5}]}]}]}},{"id":"TOWDISB","name":"Tow Trucks And Disabled Vehicles","size":{"powerUnits":[{"type":"TOWVEHC","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.3,"l":27.5}]}]}]}},{"id":"TRQDLOG","name":"Tri-Axle or Quad Axle Full Trailer Loaded on Logging Truck","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":5,"w":2.6,"h":4.3,"l":13.5}]}]},{"type":"REGTRCK","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":5,"w":2.6,"h":4.3,"l":13.5}]}]}]}},{"id":"WOODCHP","name":"Wood Chips, Residuals","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"STBTRAN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.45,"l":27.5}]}]}]}},{"id":"EMPTYXX","name":"Empty","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"LOGOWBK","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":0,"rp":0,"w":3.2,"h":4.15,"l":23}]},{"type":"PLATFRM","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.15,"l":27.5}]},{"type":"HIBOEXP","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.4,"l":31,"regions":[{"region":"LMN","h":4.15},{"region":"PCE","h":5.33}]}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.4,"l":27.5,"regions":[{"region":"LMN","h":4.15},{"region":"PCE","h":5.33}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.4,"l":31,"regions":[{"region":"LMN","h":4.15},{"region":"PCE","h":5.33}]}]},{"type":"STWHELR","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.88,"l":27.5,"regions":[{"region":"LMN","h":4.15},{"region":"PCE","h":5.33}]}]},{"type":"STWIDWH","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.88,"l":27.5,"regions":[{"region":"LMN","h":4.15},{"region":"PCE","h":5.33}]}]}]},{"type":"PICKRTT","trailers":[{"type":"OGOSFDT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.15,"l":23}]},{"type":"PLATFRM","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.15,"l":27.5}]},{"type":"HIBOEXP","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":25,"regions":[{"region":"PCE","l":27.5}]}]},{"type":"STWHELR","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.15,"l":27.5}]},{"type":"STWIDWH","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.15,"l":27.5}]}]}]}},{"id":"GRBBINS","name":"Garbage Bins","size":{"powerUnits":[{"type":"REGTRCK","trailers":[{"type":"FULLLTL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":23}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":12.5}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":23}]}]}]}},{"id":"LAMBEAM","name":"Laminated Beams","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"POLETRL","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":40}]},{"type":"HIBOEXP","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":31}]}]}]}},{"id":"HAYLREC","name":"Hay Bales Large Rectangular","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"STACTRN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.05,"h":4.3,"l":26,"regions":[{"region":"PCE","h":4.8}]}]},{"type":"STBTRAN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.05,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":4.8}]}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.05,"h":4.4,"l":23,"regions":[{"region":"LMN","h":4.3},{"region":"KTN","h":4.3},{"region":"PCE","h":4.8}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.05,"h":4.3,"l":23,"regions":[{"region":"PCE","h":4.8}]}]}]},{"type":"REGTRCK","trailers":[{"type":"FULLLTL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":4,"w":3.05,"h":4.3,"l":23,"regions":[{"region":"PCE","h":4.8}]}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.05,"h":4.3,"l":12.5,"regions":[{"region":"PCE","h":4.8}]}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":4,"w":3.05,"h":4.3,"l":23,"regions":[{"region":"PCE","h":4.8}]}]}]}]}},{"id":"HAYROND","name":"Hay Bales Round","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"STACTRN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.5,"h":4.3,"l":26,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]},{"type":"STBTRAN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.5,"h":4.3,"l":27.5,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.5,"h":4.3,"l":23,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.5,"h":4.3,"l":23,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]}]},{"type":"REGTRCK","trailers":[{"type":"FULLLTL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":4,"w":3.5,"h":4.3,"l":23,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.5,"h":4.3,"l":12.5,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":4,"w":3.5,"h":4.3,"l":23,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]}]}]}},{"id":"HAYSREC","name":"Hay Bales Small Rectangular","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"STACTRN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.05,"h":4.3,"l":26,"regions":[{"region":"PCE","h":4.8}]}]},{"type":"STBTRAN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.05,"h":4.3,"l":27.5,"regions":[{"region":"PCE","h":4.8}]}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.05,"h":4.3,"l":23,"regions":[{"region":"PCE","h":4.8}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.05,"h":4.3,"l":23,"regions":[{"region":"PCE","h":4.8}]}]}]},{"type":"REGTRCK","trailers":[{"type":"FULLLTL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":4,"w":3.05,"h":4.3,"l":23,"regions":[{"region":"PCE","h":4.8}]}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.05,"h":4.3,"l":12.5,"regions":[{"region":"PCE","h":4.8}]}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":4,"w":3.05,"h":4.3,"l":23,"regions":[{"region":"PCE","h":4.8}]}]}]}]}},{"id":"BRGBEAM","name":"Bridge Beams","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"POLETRL","jeep":true,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":31}]},{"type":"SEMITRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.2,"h":4.3,"l":31,"regions":[{"region":"PCE","h":5.33}]}]}]}]}},{"id":"NONREDU","name":"Non-Reducible Loads","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"STLOGNG","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.8,"h":4.15,"l":27.5}]},{"type":"PLATFRM","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"SEMITRL","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STACTRN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.4,"l":26,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STBTRAN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.4,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"HIBOEXP","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.4,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.4,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STSTEER","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STWHELR","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STWIDWH","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STCRANE","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STROPRT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":40,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STRSELF","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":36,"regions":[{"region":"PCE","h":5.33}]}]}]},{"type":"PICKRTT","trailers":[{"type":"OGOSFDT","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.3,"h":4.3,"l":23}]},{"type":"SEMITRL","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":25,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"HIBOEXP","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.4,"l":25,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.4,"l":25,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":25,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STSTEER","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STWHELR","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STWIDWH","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STCRANE","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":27.5,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STROPRT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":40,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STRSELF","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":5,"h":4.88,"l":36,"regions":[{"region":"PCE","h":5.33}]}]}]},{"type":"STINGER","trailers":[{"type":"SEMITRL","jeep":false,"booster":false,"selfIssue":false,"sizeDimensions":[{"fp":1,"rp":1.2,"w":2.6,"h":4.88,"l":25,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"STSTNGR","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1.2,"w":2.6,"h":4.88,"l":25,"regions":[{"region":"PCE","h":5.33}]}]}]},{"type":"REGTRCK","trailers":[{"type":"DOLLIES","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.5,"w":5,"h":4.88,"l":25,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"FULLLTL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.5,"w":5,"h":4.88,"l":25,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.5,"w":5,"h":4.88,"l":16,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":6.5,"w":5,"h":4.88,"l":25,"regions":[{"region":"PCE","h":5.33}]}]}]}]}},{"id":"AUTOCRR","name":"Auto Carrier, Campers And Boats (Stinger Steered Transporters Only)","size":{"powerUnits":[{"type":"STINGER","trailers":[{"type":"STSTNGR","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1.2,"w":2.6,"h":4.4,"l":25,"regions":[{"region":"LMN","h":4.3},{"region":"KTN","h":4.3},{"region":"PCE","h":4.88}]}]}]}]}},{"id":"HAYRNPR","name":"Hay Bales (Round) Peace River Only","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"STACTRN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.5,"h":4.3,"l":26,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]},{"type":"STBTRAN","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.5,"h":4.3,"l":27.5,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]},{"type":"HIBOFLT","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.5,"h":4.3,"l":23,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.5,"h":4.3,"l":23,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]}]},{"type":"REGTRCK","trailers":[{"type":"FULLLTL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":4,"w":3.5,"h":4.3,"l":23,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]},{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":3.5,"h":4.3,"l":12.5,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":4,"w":3.5,"h":4.3,"l":23,"regions":[{"region":"PCE","w":3.84,"h":4.8}]}]}]}]}},{"id":"BRSHCUT","name":"Brushcutters (Peace Only)","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"SEMITRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":23,"regions":[{"region":"PCE","w":4.57,"h":5.33}]}]},{"type":"STSDBDK","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":23,"regions":[{"region":"PCE","w":4.57,"h":5.33}]}]}]},{"type":"REGTRCK","trailers":[{"type":"NONEXXX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.15,"l":12.5,"regions":[{"region":"PCE","w":4.57,"h":5.33}]}]},{"type":"PONYTRL","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":1,"w":2.6,"h":4.15,"l":23,"regions":[{"region":"PCE","w":3.8,"h":5.33}]}]}]}]}},{"id":"FIXEDEQ","name":"Fixed Equipment","size":{"powerUnits":[{"type":"TRKTRAC","trailers":[{"type":"FECVYER","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":4,"rp":9.5,"w":3.8,"h":4.72,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"FEDRMMX","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.8,"h":4.72,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"FEBGHSE","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":4.26,"h":4.72,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"FESEMTR","jeep":true,"booster":true,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.8,"h":4.72,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"FEWHELR","jeep":true,"booster":true,"selfIssue":false,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.8,"h":4.72,"regions":[{"region":"PCE","h":5.33}]}]}]},{"type":"REGTRCK","trailers":[{"type":"FECVYPT","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":4,"rp":9.5,"w":3.2,"h":4.3}]},{"type":"FEDRMMX","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":3.8,"h":4.72,"regions":[{"region":"PCE","h":5.33}]}]},{"type":"FEPNYTR","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":1,"rp":4,"w":3.2,"h":4.3}]},{"type":"FEBGHSE","jeep":false,"booster":false,"selfIssue":true,"sizeDimensions":[{"fp":3,"rp":6.5,"w":4.26,"h":4.72}]}]}]}}],"globalSizeDefaults":{"fp":3,"rp":6.5,"w":2.6,"h":4.15,"l":31}}') +GO + +DECLARE @VersionDescription VARCHAR(255) +SET @VersionDescription = 'Updates to policy configuration JSON allowing lcv for TROS and TROW' + +INSERT [dbo].[ORBC_SYS_VERSION] ([VERSION_ID], [DESCRIPTION], [UPDATE_SCRIPT], [REVERT_SCRIPT], [RELEASE_DATE]) VALUES (55, @VersionDescription, '$(UPDATE_SCRIPT)', '$(REVERT_SCRIPT)', getutcdate()) +IF @@ERROR <> 0 SET NOEXEC ON +GO + +COMMIT TRANSACTION +GO +IF @@ERROR <> 0 SET NOEXEC ON +GO +DECLARE @Success AS BIT +SET @Success = 1 +SET NOEXEC OFF +IF (@Success = 1) PRINT 'The database update succeeded' +ELSE BEGIN + IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION + PRINT 'The database update failed' +END +GO diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b2dbb892c..f9da50897 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -26,7 +26,7 @@ "material-react-table": "^2.13.3", "mui-nested-menu": "^3.4.0", "oidc-client-ts": "^3.1.0", - "onroute-policy-engine": "^1.1.0", + "onroute-policy-engine": "^1.4.1", "react": "^18.3.1", "react-dom": "^18.3.1", "react-error-boundary": "^4.1.2", @@ -7661,9 +7661,9 @@ } }, "node_modules/onroute-policy-engine": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onroute-policy-engine/-/onroute-policy-engine-1.1.0.tgz", - "integrity": "sha512-2W5FXX5xRnYjFcB+zEmZMRoA+bMP5p4nLEMlD3AvU4LwCgiYyRreoiOnTBN+plVPWmL1oCnfaDl5o+2RjxbIWw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/onroute-policy-engine/-/onroute-policy-engine-1.4.1.tgz", + "integrity": "sha512-NSlwb9j2IK6hSk2LOiP02pno51h19t/sCYNUsEpzRww3CPOVOeDw8N4zer7D3tbwDCA9EBkvaLKQh7c8v8nqFQ==", "dependencies": { "dayjs": "^1.11.13", "json-rules-engine": "^7.2.1", @@ -14923,9 +14923,9 @@ } }, "onroute-policy-engine": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onroute-policy-engine/-/onroute-policy-engine-1.1.0.tgz", - "integrity": "sha512-2W5FXX5xRnYjFcB+zEmZMRoA+bMP5p4nLEMlD3AvU4LwCgiYyRreoiOnTBN+plVPWmL1oCnfaDl5o+2RjxbIWw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/onroute-policy-engine/-/onroute-policy-engine-1.4.1.tgz", + "integrity": "sha512-NSlwb9j2IK6hSk2LOiP02pno51h19t/sCYNUsEpzRww3CPOVOeDw8N4zer7D3tbwDCA9EBkvaLKQh7c8v8nqFQ==", "requires": { "dayjs": "^1.11.13", "json-rules-engine": "^7.2.1", diff --git a/frontend/package.json b/frontend/package.json index d3eb8041f..da1d2aaaa 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -21,7 +21,7 @@ "material-react-table": "^2.13.3", "mui-nested-menu": "^3.4.0", "oidc-client-ts": "^3.1.0", - "onroute-policy-engine": "^1.1.0", + "onroute-policy-engine": "^1.4.1", "react": "^18.3.1", "react-dom": "^18.3.1", "react-error-boundary": "^4.1.2", diff --git a/frontend/src/features/permits/ApplicationSteps.tsx b/frontend/src/features/permits/ApplicationSteps.tsx index 27259c032..1d8d7cfe3 100644 --- a/frontend/src/features/permits/ApplicationSteps.tsx +++ b/frontend/src/features/permits/ApplicationSteps.tsx @@ -3,7 +3,10 @@ import { ErrorBoundary } from "react-error-boundary"; import { ApplicationStepPage } from "./components/dashboard/ApplicationStepPage"; import { ErrorFallback } from "../../common/pages/ErrorFallback"; -import { ApplicationStep, ApplicationStepContext } from "../../routes/constants"; +import { + ApplicationStep, + ApplicationStepContext, +} from "../../routes/constants"; export const ApplicationSteps = React.memo( ({ diff --git a/frontend/src/features/permits/components/dashboard/ApplicationStepPage.tsx b/frontend/src/features/permits/components/dashboard/ApplicationStepPage.tsx index a813011e8..f19605cd8 100644 --- a/frontend/src/features/permits/components/dashboard/ApplicationStepPage.tsx +++ b/frontend/src/features/permits/components/dashboard/ApplicationStepPage.tsx @@ -129,11 +129,11 @@ export const ApplicationStepPage = ({ ); } - return ( ); }; diff --git a/frontend/src/features/permits/helpers/vehicles/subtypes/getEligibleVehicleSubtypes.ts b/frontend/src/features/permits/helpers/vehicles/subtypes/getEligibleVehicleSubtypes.ts index 5ffb1dbc2..e1026ea3c 100644 --- a/frontend/src/features/permits/helpers/vehicles/subtypes/getEligibleVehicleSubtypes.ts +++ b/frontend/src/features/permits/helpers/vehicles/subtypes/getEligibleVehicleSubtypes.ts @@ -1,14 +1,8 @@ import { Policy } from "onroute-policy-engine"; import { Nullable } from "../../../../../common/types/common"; -import { PERMIT_TYPES, PermitType } from "../../../types/PermitType"; +import { PermitType } from "../../../types/PermitType"; import { getDefaultRequiredVal } from "../../../../../common/helpers/util"; -import { TROW_ELIGIBLE_VEHICLE_SUBTYPES } from "../../../constants/trow"; -import { TROS_ELIGIBLE_VEHICLE_SUBTYPES } from "../../../constants/tros"; -import { - DEFAULT_COMMODITY_SELECT_VALUE, - LCV_VEHICLE_SUBTYPES, -} from "../../../constants/constants"; /** * Get eligible vehicle subtypes based on given criteria. @@ -20,41 +14,30 @@ import { */ export const getEligibleVehicleSubtypes = ( permitType: PermitType, - isLcvDesignated: boolean, selectedCommodity?: Nullable, policyEngine?: Nullable, ) => { - const lcvSubtypes = LCV_VEHICLE_SUBTYPES.map(({ typeCode }) => typeCode); - switch (permitType) { - case PERMIT_TYPES.STOS: { - if (!selectedCommodity || !policyEngine || (selectedCommodity === DEFAULT_COMMODITY_SELECT_VALUE)) - return new Set(); + if (!policyEngine) + return new Set(); - const subtypesMap = policyEngine.getPermittableVehicleTypes(permitType, selectedCommodity); - return new Set( - [ - ...getDefaultRequiredVal( - new Map(), - subtypesMap.get("powerUnits"), - ).keys(), - ...getDefaultRequiredVal( - new Map(), - subtypesMap.get("trailers"), - ).keys(), - ].concat(isLcvDesignated ? lcvSubtypes : []), - ); - } - // Policy engine currently doesn't return vehicle subtypes unless a commodity is provided - // which TROW and TROS doesn't have, thus here the hardcoded subtypes are being used - case PERMIT_TYPES.TROW: - return new Set( - TROW_ELIGIBLE_VEHICLE_SUBTYPES.concat(isLcvDesignated ? lcvSubtypes : []), - ); - case PERMIT_TYPES.TROS: - return new Set( - TROS_ELIGIBLE_VEHICLE_SUBTYPES.concat(isLcvDesignated ? lcvSubtypes : []), - ); - default: - return new Set(); - } + // The policy engine requires a commodity to be provided for any + // permit type where commodity is required, hence the nullish + // coalescing operator on the second parameter. An empty string will + // result in an empty map returned. + const subtypesMap = policyEngine.getPermittableVehicleTypes( + permitType, + getDefaultRequiredVal('-', selectedCommodity), + ); + return new Set( + [ + ...getDefaultRequiredVal( + new Map(), + subtypesMap.get("powerUnits"), + ).keys(), + ...getDefaultRequiredVal( + new Map(), + subtypesMap.get("trailers"), + ).keys(), + ], + ); }; diff --git a/frontend/src/features/permits/hooks/form/useInitApplicationFormData.ts b/frontend/src/features/permits/hooks/form/useInitApplicationFormData.ts index 01a3b08de..b5546e553 100644 --- a/frontend/src/features/permits/hooks/form/useInitApplicationFormData.ts +++ b/frontend/src/features/permits/hooks/form/useInitApplicationFormData.ts @@ -55,7 +55,6 @@ export const useInitApplicationFormData = ( const initialFormData = useMemo(() => { const eligibleVehicleSubtypes = getEligibleVehicleSubtypes( permitType, - isLcvDesignated, applicationData?.permitData?.permittedCommodity?.commodityType, policyEngine, ); diff --git a/frontend/src/features/permits/hooks/usePermitVehicles.ts b/frontend/src/features/permits/hooks/usePermitVehicles.ts index 151c26836..01556833e 100644 --- a/frontend/src/features/permits/hooks/usePermitVehicles.ts +++ b/frontend/src/features/permits/hooks/usePermitVehicles.ts @@ -45,7 +45,6 @@ export const usePermitVehicles = ( const eligibleVehicleSubtypes = useMemo(() => { return getEligibleVehicleSubtypes( permitType, - isLcvDesignated, selectedCommodity, policyEngine, ); diff --git a/frontend/src/features/permits/pages/Amend/components/AmendPermitForm.tsx b/frontend/src/features/permits/pages/Amend/components/AmendPermitForm.tsx index 0dd87a6ed..bc5f12244 100644 --- a/frontend/src/features/permits/pages/Amend/components/AmendPermitForm.tsx +++ b/frontend/src/features/permits/pages/Amend/components/AmendPermitForm.tsx @@ -94,7 +94,7 @@ export const AmendPermitForm = () => { trailerSubtypeNamesMap, } = usePermitVehicleManagement(companyId); - const policyEngine = usePolicyEngine(); + const policyEngine = usePolicyEngine(specialAuthorizations); const { initialFormData, formData, formMethods } = useAmendPermitForm({ repopulateFormData: currentStepIndex === 0, diff --git a/frontend/src/features/permits/pages/Amend/components/AmendPermitReview.tsx b/frontend/src/features/permits/pages/Amend/components/AmendPermitReview.tsx index 4ec5c4dad..6583deaaf 100644 --- a/frontend/src/features/permits/pages/Amend/components/AmendPermitReview.tsx +++ b/frontend/src/features/permits/pages/Amend/components/AmendPermitReview.tsx @@ -23,6 +23,7 @@ import { applyWhenNotNullable, getDefaultRequiredVal, } from "../../../../../common/helpers/util"; +import { useFetchSpecialAuthorizations } from "../../../../settings/hooks/specialAuthorizations"; export const AmendPermitReview = () => { const navigate = useNavigate(); @@ -59,8 +60,9 @@ export const AmendPermitReview = () => { amendmentApplication?.permitType, permit?.permitType, ); + const { data: specialAuthorizations } = useFetchSpecialAuthorizations(companyId); - const policyEngine = usePolicyEngine(); + const policyEngine = usePolicyEngine(specialAuthorizations); const { commodityOptions } = useCommodityOptions(policyEngine, permitType); const powerUnitSubTypesQuery = usePowerUnitSubTypesQuery(); const trailerSubTypesQuery = useTrailerSubTypesQuery(); diff --git a/frontend/src/features/permits/pages/Amend/hooks/useAmendPermitForm.ts b/frontend/src/features/permits/pages/Amend/hooks/useAmendPermitForm.ts index ed3346e01..0300499b9 100644 --- a/frontend/src/features/permits/pages/Amend/hooks/useAmendPermitForm.ts +++ b/frontend/src/features/permits/pages/Amend/hooks/useAmendPermitForm.ts @@ -46,7 +46,6 @@ export const useAmendPermitForm = ( if (amendmentApplication) { const eligibleSubtypes = getEligibleVehicleSubtypes( amendmentApplication.permitType, - isLcvDesignated, amendmentApplication.permitData.permittedCommodity?.commodityType, policyEngine, ); @@ -80,7 +79,6 @@ export const useAmendPermitForm = ( const eligibleSubtypes = getEligibleVehicleSubtypes( defaultPermitFormData.permitType, - isLcvDesignated, defaultPermitFormData.permitData.permittedCommodity?.commodityType, policyEngine, ); diff --git a/frontend/src/features/permits/pages/Application/ApplicationForm.tsx b/frontend/src/features/permits/pages/Application/ApplicationForm.tsx index 823489d76..d91a09f96 100644 --- a/frontend/src/features/permits/pages/Application/ApplicationForm.tsx +++ b/frontend/src/features/permits/pages/Application/ApplicationForm.tsx @@ -46,7 +46,10 @@ import { import { APPLICATIONS_ROUTES, + APPLICATION_QUEUE_ROUTES, APPLICATION_STEPS, + APPLICATION_STEP_CONTEXTS, + ApplicationStepContext, ERROR_ROUTES, } from "../../../../routes/constants"; @@ -59,9 +62,11 @@ const FEATURE = "application"; export const ApplicationForm = ({ permitType, companyId, + applicationStepContext, }: { permitType: PermitType; companyId: number; + applicationStepContext: ApplicationStepContext; }) => { // Context to hold all of the application data related to the application const applicationContext = useContext(ApplicationContext); @@ -88,7 +93,7 @@ export const ApplicationForm = ({ trailerSubtypeNamesMap, } = usePermitVehicleManagement(companyId); - const policyEngine = usePolicyEngine(); + const policyEngine = usePolicyEngine(specialAuthorizations); // Use a custom hook that performs the following whenever page is rendered (or when application context is updated/changed): // 1. Get all data needed to initialize the application form (from application context, company, user details) @@ -192,6 +197,7 @@ export const ApplicationForm = ({ const updatedViolations = await triggerPolicyValidation(); // prevent CV client continuing if there are policy engine validation errors if (Object.keys(updatedViolations).length > 0 && !isStaffUser) { + console.error(updatedViolations); return; } @@ -201,10 +207,13 @@ export const ApplicationForm = ({ const savedVehicleDetails = await handleSaveVehicle(vehicleData); // Save application before continuing - await onSaveApplication( - (permitId) => navigate(APPLICATIONS_ROUTES.REVIEW(permitId)), - savedVehicleDetails, - ); + await onSaveApplication((permitId) => { + return navigate( + applicationStepContext === APPLICATION_STEP_CONTEXTS.QUEUE + ? APPLICATION_QUEUE_ROUTES.REVIEW(companyId, permitId) + : APPLICATIONS_ROUTES.REVIEW(permitId), + ); + }, savedVehicleDetails); }; const onSaveSuccess = (savedApplication: Application, status: number) => { diff --git a/frontend/src/features/permits/pages/Application/ApplicationReview.tsx b/frontend/src/features/permits/pages/Application/ApplicationReview.tsx index 715c490ee..e0009363a 100644 --- a/frontend/src/features/permits/pages/Application/ApplicationReview.tsx +++ b/frontend/src/features/permits/pages/Application/ApplicationReview.tsx @@ -65,7 +65,7 @@ export const ApplicationReview = ({ const navigate = useNavigate(); - const policyEngine = usePolicyEngine(); + const policyEngine = usePolicyEngine(specialAuth); const { commodityOptions } = useCommodityOptions(policyEngine, permitType); const powerUnitSubTypesQuery = usePowerUnitSubTypesQuery(); const trailerSubTypesQuery = useTrailerSubTypesQuery(); diff --git a/frontend/src/features/policy/hooks/usePolicyEngine.ts b/frontend/src/features/policy/hooks/usePolicyEngine.ts index d5cb9c529..53066af83 100644 --- a/frontend/src/features/policy/hooks/usePolicyEngine.ts +++ b/frontend/src/features/policy/hooks/usePolicyEngine.ts @@ -3,6 +3,7 @@ import { Policy } from "onroute-policy-engine"; import { usePolicyConfigurationQuery } from "./usePolicyConfigurationQuery"; import { isNull } from "../../../common/types/common"; +import { SpecialAuthorizationData } from "../../settings/types/SpecialAuthorization"; /** * Hook that instantiates the policy engine instance. @@ -10,7 +11,7 @@ import { isNull } from "../../../common/types/common"; * and null when there's a problem getting the policy configuration. * @returns The instantiated policy engine, or undefined when loading, and null on error */ -export const usePolicyEngine = () => { +export const usePolicyEngine = (specialAuthorizations?: SpecialAuthorizationData) => { const { data: policyConfiguration } = usePolicyConfigurationQuery(); const policyEngine = useMemo(() => { @@ -20,5 +21,9 @@ export const usePolicyEngine = () => { return new Policy(policyConfiguration.policy); }, [policyConfiguration]); + if (specialAuthorizations) { + policyEngine?.setSpecialAuthorizations(specialAuthorizations); + } + return policyEngine; }; diff --git a/frontend/src/features/queue/components/ApplicationInQueueReview.tsx b/frontend/src/features/queue/components/ApplicationInQueueReview.tsx index e6b2a8dcb..7369b8d96 100644 --- a/frontend/src/features/queue/components/ApplicationInQueueReview.tsx +++ b/frontend/src/features/queue/components/ApplicationInQueueReview.tsx @@ -5,7 +5,11 @@ import { useNavigate } from "react-router-dom"; import "./ApplicationInQueueReview.scss"; import { getDefaultRequiredVal } from "../../../common/helpers/util"; import { Nullable } from "../../../common/types/common"; -import { APPLICATION_QUEUE_ROUTES, APPLICATION_STEPS, IDIR_ROUTES } from "../../../routes/constants"; +import { + APPLICATION_QUEUE_ROUTES, + APPLICATION_STEPS, + IDIR_ROUTES, +} from "../../../routes/constants"; import { useCompanyInfoDetailsQuery } from "../../manageProfile/apiManager/hooks"; import { usePowerUnitSubTypesQuery } from "../../manageVehicles/hooks/powerUnits"; import { useTrailerSubTypesQuery } from "../../manageVehicles/hooks/trailers"; @@ -36,7 +40,10 @@ export const ApplicationInQueueReview = ({ const { data: companyInfo } = useCompanyInfoDetailsQuery(companyId); const doingBusinessAs = companyInfo?.alternateName; - const permitType = getDefaultRequiredVal(DEFAULT_PERMIT_TYPE, applicationData?.permitType); + const permitType = getDefaultRequiredVal( + DEFAULT_PERMIT_TYPE, + applicationData?.permitType, + ); const fee = isNoFeePermitType ? "0" : `${calculateFeeByDuration( @@ -46,7 +53,7 @@ export const ApplicationInQueueReview = ({ const navigate = useNavigate(); - const policyEngine = usePolicyEngine(); + const policyEngine = usePolicyEngine(specialAuth); const { commodityOptions } = useCommodityOptions(policyEngine, permitType); const powerUnitSubTypesQuery = usePowerUnitSubTypesQuery(); const trailerSubTypesQuery = useTrailerSubTypesQuery(); @@ -58,7 +65,9 @@ export const ApplicationInQueueReview = ({ const [hasAttemptedSubmission, setHasAttemptedSubmission] = useState(false); const handleEdit = () => { - navigate(APPLICATION_QUEUE_ROUTES.EDIT(companyId, applicationId), { replace: true }); + navigate(APPLICATION_QUEUE_ROUTES.EDIT(companyId, applicationId), { + replace: true, + }); }; const isSuccess = (status?: number) => status === 201; @@ -146,7 +155,9 @@ export const ApplicationInQueueReview = ({ vehicleWasSaved={ applicationData?.permitData?.vehicleDetails?.saveVehicle } - vehicleConfiguration={applicationData?.permitData?.vehicleConfiguration} + vehicleConfiguration={ + applicationData?.permitData?.vehicleConfiguration + } route={applicationData?.permitData?.permittedRoute} applicationNotes={applicationData?.permitData?.applicationNotes} doingBusinessAs={doingBusinessAs} diff --git a/frontend/src/routes/constants.ts b/frontend/src/routes/constants.ts index 69b5d7e87..4102c88bf 100644 --- a/frontend/src/routes/constants.ts +++ b/frontend/src/routes/constants.ts @@ -71,10 +71,7 @@ const PERMITS_ROUTE_BASE = "/permits"; export const PERMITS_ROUTES = { BASE: PERMITS_ROUTE_BASE, SUCCESS: `${PERMITS_ROUTE_BASE}/success`, - VOID: ( - companyId?: Nullable, - permitId?: Nullable, - ) => + VOID: (companyId?: Nullable, permitId?: Nullable) => `${DYNAMIC_ROUTE_URI( "/companies", ROUTE_PLACEHOLDERS.COMPANY_ID, @@ -84,10 +81,7 @@ export const PERMITS_ROUTES = { ROUTE_PLACEHOLDERS.PERMIT_ID, permitId, )}/void`, - AMEND: ( - companyId?: Nullable, - permitId?: Nullable, - ) => + AMEND: (companyId?: Nullable, permitId?: Nullable) => `${DYNAMIC_ROUTE_URI( "/companies", ROUTE_PLACEHOLDERS.COMPANY_ID, @@ -160,10 +154,7 @@ export const APPLICATION_QUEUE_ROUTES = { ROUTE_PLACEHOLDERS.PERMIT_ID, permitId, )}/review`, - EDIT: ( - companyId?: Nullable, - permitId?: Nullable, - ) => + EDIT: (companyId?: Nullable, permitId?: Nullable) => `${DYNAMIC_ROUTE_URI( "/companies", ROUTE_PLACEHOLDERS.COMPANY_ID, @@ -229,6 +220,5 @@ export const ONROUTE_WEBPAGE_LINKS = { "https://www2.gov.bc.ca/gov/content/governments/organizational-structure/ministries-organizations/ministries/citizens-services/servicebc#locations", LIST_OF_BC_HIGHWAYS: "https://www2.gov.bc.ca/gov/content/transportation/transportation-reports-and-reference/reference-information/numbered-routes", - HEIGHT_CLEARANCE_TOOL: - "https://www.drivebc.ca/cvrp/?c=hct", + HEIGHT_CLEARANCE_TOOL: "https://www.drivebc.ca/cvrp/?c=hct", }; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..e139a734b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "onroutebc", + "lockfileVersion": 3, + "requires": true, + "packages": {} +}