UNPKG

@tmlmobilidade/types

Version:
107 lines (106 loc) 4.69 kB
/* * */ import { z } from 'zod'; /* * */ export const RIDE_ANALYSIS_GRADE_OPTIONS = ['pass', 'fail', 'skip', 'error']; export const RideAnalysisGradeSchema = z.enum(RIDE_ANALYSIS_GRADE_OPTIONS); export const RideAnalysisGradeWithNoneSchema = RideAnalysisGradeSchema.or(z.literal('none')); /* * */ /** * Schema for ride analysis summary. * * This schema represents a record where each key is a string and the value is an object * containing: * - grade: A value from the RideAnalysisGradeSchema, indicating the result of the analysis. * - reason: A string providing the reason for the given grade. * * @example * { * TEST_1: { grade: 'failed', reason: 'TEST_REASON' }, * TEST_2: { grade: 'failed', reason: 'TEST_REASON' }, * } */ export const RideAnalysisSummarySchema = z.record(z.string(), z.object({ grade: RideAnalysisGradeSchema, reason: z.string(), })); /* * */ export const RideAnalysisSchema = z.object({ error_message: z.string().optional(), grade: RideAnalysisGradeSchema, reason: z.string(), }); /* * */ export const atLeastOneVehicleEventOnFirstStopSchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_PATH_DATA', 'NO_VEHICLE_EVENTS', 'NO_VEHICLE_EVENTS_ON_FIRST_STOP', 'ONE_OR_MORE_VEHICLE_EVENTS_ON_FIRST_STOP']), value: z.number().nullable(), }); /* * */ export const expectedDriverIdQtySchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_VEHICLE_EVENTS', 'UNEXPECTED_DRIVER_ID_QTY', 'EXPECTED_DRIVER_ID_QTY']), value: z.number().nullable(), }); /* * */ export const expectedVehicleIdQtySchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_VEHICLE_EVENTS', 'NO_APEX_VALIDATIONS', 'UNEXPECTED_VEHICLE_ID_QTY', 'EXPECTED_VEHICLE_ID_QTY']), value: z.number().nullable(), }); /* * */ export const expectedVehicleEventIntervalSchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_VEHICLE_EVENTS', 'EXPECTED_VEHICLE_EVENT_INTERVAL', 'UNEXPECTED_VEHICLE_EVENT_INTERVAL']), value: z.number().nullable(), }); /* * */ export const endedAtLastStopSchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_PATH_DATA', 'NO_VEHICLE_EVENTS', 'ENDED_AT_LAST_STOP', 'ENDED_OUTSIDE_OF_LAST_STOP']), }); /* * */ export const expectedVehicleEventDelaySchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_VEHICLE_EVENTS', 'UNEXPECTED_VEHICLE_EVENTS_DELAY', 'EXPECTED_VEHICLE_EVENTS_DELAY']), value: z.number().nullable(), }); /* * */ export const expectedVehicleEventQtySchema = RideAnalysisSchema.extend({ expected_qty: z.number().nullable(), found_qty: z.number().nullable(), reason: z.enum(['NO_PATH_DATA', 'NO_VEHICLE_EVENTS', 'EXPECTED_VEHICLE_EVENT_QTY', 'UNEXPECTED_VEHICLE_EVENT_QTY']), }); /* * */ export const matchingApexLocationsSchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_PATH_DATA', 'NO_APEX_LOCATIONS', 'MISSING_APEX_LOCATION_FOR_AT_LEAST_ONE_STOP', 'MATCHING_APEX_LOCATIONS']), }); /* * */ export const expectedStartTimeSchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_START_TIME_SCHEDULED', 'NO_VEHICLE_EVENTS', 'UNKNOWN_START', 'EARLY_START', 'LATE_START', 'START_ON_TIME']), value: z.number().nullable(), }); /* * */ export const simpleOneApexValidationSchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_APEX_VALIDATIONS', 'ONE_OR_MORE_APEX_VALIDATIONS']), value: z.number().nullable(), }); /* * */ export const simpleOneVehicleEventOrApexValidationSchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_VEHICLE_EVENTS_OR_APEX_VALIDATIONS', 'FOUND_VEHICLE_EVENT_OR_APEX_VALIDATION']), }); /* * */ export const simpleThreeVehicleEventsSchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_PATH_DATA', 'NO_VEHICLE_EVENTS', 'MISSING_FIRST_STOPS', 'MISSING_MIDDLE_STOPS', 'MISSING_LAST_STOPS', 'ALL_STOPS_FOUND']), stop_ids_first: z.array(z.string()).nullable(), stop_ids_last: z.array(z.string()).nullable(), stop_ids_middle: z.array(z.string()).nullable(), }); /* * */ export const transactionSequentialitySchema = RideAnalysisSchema.extend({ expected_qty: z.number().nullable(), found_qty: z.number().nullable(), missing_qty: z.number().nullable(), reason: z.enum(['NO_TRANSACTIONS', 'MISSING_TRANSACTIONS', 'ALL_TRANSACTIONS_RECEIVED']), }); /* * */ export const matchingVehicleIdsSchema = RideAnalysisSchema.extend({ reason: z.enum(['MATCHING_VEHICLE_IDS', 'VEHICLE_ID_MISMATCH', 'NO_VEHICLE_EVENTS', 'NO_APEX_TRANSACTIONS']), }); /* * */ export const expectedApexValidationIntervalSchema = RideAnalysisSchema.extend({ reason: z.enum(['NO_APEX_VALIDATIONS', 'NOT_ENOUGH_VALIDATIONS', 'INTERVALS_TOO_SHORT', 'NON_ORGANIC_INTERVALS', 'EXPECTED_VALIDATION_INTERVALS']), });