@tmlmobilidade/types
Version:
33 lines (32 loc) • 1.72 kB
JavaScript
/* * */
import { AlertCauseSchema } from '../../alerts/cause.js';
import { RideAnalysisSummarySchema } from './ride-analysis.js';
import { CommentSchema, DocumentSchema } from '@tmlmobilidade/go-types-shared';
import { z } from 'zod';
/* * */
export const RIDE_ACCEPTANCE_STATUS_OPTIONS = ['justification_required', 'under_review', 'accepted', 'rejected'];
export const RideAcceptanceStatusSchema = z.enum(RIDE_ACCEPTANCE_STATUS_OPTIONS);
export const RIDE_JUSTIFICATION_SOURCE_OPTIONS = ['MANUAL', 'ALERT'];
export const RideJustificationSourceSchema = z.enum(RIDE_JUSTIFICATION_SOURCE_OPTIONS);
export const RIDE_JUSTIFICATION_STATUS_TYPE_OPTIONS = ['locked_status', 'acceptance_status', 'pto_message'];
export const RideJustificationStatusTypeSchema = z.enum(RIDE_JUSTIFICATION_STATUS_TYPE_OPTIONS);
/* * */
export const RideJustificationSchema = DocumentSchema
.omit({ _id: true, is_locked: true })
.extend({
justification_cause: AlertCauseSchema,
justification_source: RideJustificationSourceSchema,
manual_trip_id: z.string().optional(),
pto_message: z.string().min(2).max(5000).default(''),
});
/* * */
export const RideAcceptanceSchema = DocumentSchema.extend({
acceptance_status: RideAcceptanceStatusSchema,
analysis_summary: RideAnalysisSummarySchema,
comments: z.array(CommentSchema).default([]),
is_locked: z.boolean().default(false),
justification: RideJustificationSchema.nullable(),
ride_id: z.string(),
});
export const CreateRideAcceptanceSchema = RideAcceptanceSchema.partial({ _id: true }).omit({ created_at: true, updated_at: true });
export const UpdateRideAcceptanceSchema = RideAcceptanceSchema.omit({ created_at: true, created_by: true }).partial();