import z from "zod"; import mongoose from "mongoose"; import { pageQueryParams } from "../pagination"; import { buildJsonSchemas } from "fastify-zod"; const processedSchema = new mongoose.Schema({ tenantId: { type: String, required: true, }, pid: { type: String, unique: true, }, permitNumber: String, county: Object, client: { type: mongoose.Types.ObjectId, ref: "organization", }, clientData: Object, permitDate: Date, stage: new mongoose.Schema( { pipeline: Array, currentStage: Number, }, { _id: false } ), status: String, manualStatus: String, cleanStatus: String, permitType: String, utility: String, assignedTo: { type: mongoose.Types.ObjectId, ref: "user", }, link: String, address: Object, recordType: String, description: String, applicationDetails: Object, applicationInfo: Object, applicationInfoTable: Object, conditions: Array, ownerDetails: String, parcelInfo: Object, paymentData: Object, professionalsList: Array, inspections: Object, createdAt: Date, createdBy: { type: mongoose.Types.ObjectId, ref: "user", }, newProcessingStatus: Array, newPayment: Array, newConditions: Array, professionals: Object, recordId: String, relatedRecords: Object, accelaStatus: String, openDate: Date, lastUpdateDate: Date, statusUpdated: Date, transferDate: Date, }).index({ tenantId: 1, permitNumber: 1 }, { unique: true }); export const processedFields = Object.keys(processedSchema.paths).filter( (path) => path !== "__v" ); export const processedModel = mongoose.model( "processed", processedSchema, "processed" ); const updateProcessedInput = z.object({ manualStatus: z .enum(["Ready To Issue", "Issued", "Invoiced", "Paid", "Closed"]) .nullable() .optional(), utility: z .enum(["Submitted", "Pending", "Applied", "Rejected", "Paid"]) .nullable() .optional(), }); export type UpdateProcessedInput = z.infer; export const { schemas: processedSchemas, $ref: $processed } = buildJsonSchemas( { pageQueryParams, updateProcessedInput, }, { $id: "processed" } );