@tmlmobilidade/types
Version:
34 lines (33 loc) • 1.75 kB
JavaScript
/* * */
import { CommentSchema } from '../_common/comment.js';
import { DocumentSchema } from '../_common/document.js';
import { gtfsCauseSchema } from '../gtfs/cause-effetcs.js';
import { RideAnalysisSummarySchema } from './ride-analysis.js';
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: gtfsCauseSchema,
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();