Files
leistungsbilanz-ts/src/shared/validation/consumer.schemas.ts
T
2026-05-01 17:58:14 +02:00

77 lines
2.8 KiB
TypeScript

import { z } from "zod";
import {
cableCrossSectionOptions,
cableTypeOptions,
consumerGroupOptions,
deviceTypeOptions,
phaseTypeOptions,
protectionCharacteristicOptions,
protectionTypeOptions,
tradeOrCostGroupOptions,
} from "../constants/consumer-option-lists.js";
export const createConsumerSchema = z.object({
projectId: z.string().min(1),
distributionBoardId: z.string().min(1).optional(),
circuitListId: z.string().min(1).optional(),
projectDeviceId: z.string().min(1).optional(),
isLinkedToDevice: z.boolean().optional(),
roomId: z.string().min(1).optional(),
circuitNumber: z.string().optional(),
description: z.string().optional(),
name: z.string().optional(),
category: z.string().optional(),
deviceType: z.enum(deviceTypeOptions).optional(),
phaseType: z.enum(phaseTypeOptions).optional(),
tradeOrCostGroup: z.enum(tradeOrCostGroupOptions).optional(),
group: z.enum(consumerGroupOptions).optional(),
protectionType: z.enum(protectionTypeOptions).optional(),
protectionRatedCurrent: z.number().min(0).optional(),
protectionCharacteristic: z.enum(protectionCharacteristicOptions).optional(),
cableType: z.enum(cableTypeOptions).optional(),
cableCrossSection: z.enum(cableCrossSectionOptions).optional(),
comment: z.string().optional(),
quantity: z.number().min(0).optional(),
installedPowerPerUnitKw: z.number().min(0).optional(),
demandFactor: z.number().min(0).max(1).optional(),
voltageV: z.number().positive().optional(),
phaseCount: z.union([z.literal(1), z.literal(3)]).optional(),
powerFactor: z.number().min(0).max(1).optional(),
note: z.string().optional(),
});
export const updateConsumerSchema = createConsumerSchema;
export const createProjectSchema = z.object({
name: z.string().min(1),
singlePhaseVoltageV: z.number().positive().optional(),
threePhaseVoltageV: z.number().positive().optional(),
});
export const updateProjectSettingsSchema = z.object({
singlePhaseVoltageV: z.number().positive(),
threePhaseVoltageV: z.number().positive(),
});
export const createDistributionBoardSchema = z.object({
name: z.string().min(1),
});
export const createFloorSchema = z.object({
name: z.string().min(1),
});
export const createRoomSchema = z.object({
floorId: z.string().min(1).optional(),
roomNumber: z.string().min(1),
roomName: z.string().min(1),
});
export type CreateConsumerInput = z.infer<typeof createConsumerSchema>;
export type CreateProjectInput = z.infer<typeof createProjectSchema>;
export type UpdateProjectSettingsInput = z.infer<typeof updateProjectSettingsSchema>;
export type CreateDistributionBoardInput = z.infer<typeof createDistributionBoardSchema>;
export type UpdateConsumerInput = z.infer<typeof updateConsumerSchema>;
export type CreateFloorInput = z.infer<typeof createFloorSchema>;
export type CreateRoomInput = z.infer<typeof createRoomSchema>;