Prepare circuits for future sizing

This commit is contained in:
Julian Appel 2026-07-22 20:53:04 +02:00
parent 6c45c97ffd
commit 5dc3ab90be
17 changed files with 111 additions and 1 deletions

View file

@ -0,0 +1 @@
ALTER TABLE `circuits` ADD COLUMN `control_requirement` text;

View file

@ -71,6 +71,13 @@
"when": 1784743200000,
"tag": "0009_project_device_circuit_fields",
"breakpoints": true
},
{
"idx": 10,
"version": "6",
"when": 1784746800000,
"tag": "0010_circuit_control_requirement",
"breakpoints": true
}
]
}

View file

@ -30,6 +30,7 @@ export class CircuitRepository {
cableCrossSection?: string;
cableLength?: number;
voltage?: number;
controlRequirement?: string;
remark?: string;
rcdAssignment?: string;
terminalDesignation?: string;
@ -53,6 +54,7 @@ export class CircuitRepository {
rcdAssignment: input.rcdAssignment ?? null,
terminalDesignation: input.terminalDesignation ?? null,
voltage: input.voltage ?? null,
controlRequirement: input.controlRequirement ?? null,
status: input.status ?? null,
isReserve: input.isReserve ? 1 : 0,
remark: input.remark ?? null,
@ -76,6 +78,7 @@ export class CircuitRepository {
rcdAssignment?: string;
terminalDesignation?: string;
voltage?: number;
controlRequirement?: string;
status?: string;
isReserve: boolean;
remark?: string;
@ -97,6 +100,7 @@ export class CircuitRepository {
rcdAssignment: input.rcdAssignment ?? null,
terminalDesignation: input.terminalDesignation ?? null,
voltage: input.voltage ?? null,
controlRequirement: input.controlRequirement ?? null,
status: input.status ?? null,
isReserve: input.isReserve ? 1 : 0,
remark: input.remark ?? null,

View file

@ -24,6 +24,7 @@ export const circuits = sqliteTable(
rcdAssignment: text("rcd_assignment"),
terminalDesignation: text("terminal_designation"),
voltage: real("voltage"),
controlRequirement: text("control_requirement"),
status: text("status"),
isReserve: integer("is_reserve").notNull().default(0),
remark: text("remark"),

View file

@ -38,6 +38,7 @@ export interface CircuitTreeCircuit {
rcdAssignment?: string;
terminalDesignation?: string;
voltage?: number;
controlRequirement?: string;
status?: string;
isReserve: boolean;
remark?: string;

View file

@ -14,6 +14,7 @@ export interface Circuit {
rcdAssignment?: string;
terminalDesignation?: string;
voltage?: number;
controlRequirement?: string;
status?: string;
isReserve: boolean;
remark?: string;

View file

@ -113,6 +113,7 @@ export class CircuitWriteService {
rcdAssignment: input.rcdAssignment,
terminalDesignation: input.terminalDesignation,
voltage: input.voltage,
controlRequirement: input.controlRequirement,
status: input.status,
isReserve: input.isReserve ?? true,
remark: input.remark,
@ -147,6 +148,7 @@ export class CircuitWriteService {
rcdAssignment: input.rcdAssignment ?? current.rcdAssignment ?? undefined,
terminalDesignation: input.terminalDesignation ?? current.terminalDesignation ?? undefined,
voltage: input.voltage ?? current.voltage ?? undefined,
controlRequirement: input.controlRequirement ?? current.controlRequirement ?? undefined,
status: input.status ?? current.status ?? undefined,
isReserve: input.isReserve ?? Boolean(current.isReserve),
remark: input.remark ?? current.remark ?? undefined,
@ -208,6 +210,7 @@ export class CircuitWriteService {
rcdAssignment: circuit.rcdAssignment ?? undefined,
terminalDesignation: circuit.terminalDesignation ?? undefined,
voltage: circuit.voltage ?? undefined,
controlRequirement: circuit.controlRequirement ?? undefined,
status: circuit.status ?? undefined,
isReserve: false,
remark: circuit.remark ?? undefined,
@ -287,6 +290,7 @@ export class CircuitWriteService {
rcdAssignment: circuit.rcdAssignment ?? undefined,
terminalDesignation: circuit.terminalDesignation ?? undefined,
voltage: circuit.voltage ?? undefined,
controlRequirement: circuit.controlRequirement ?? undefined,
status: circuit.status ?? undefined,
isReserve: true,
remark: circuit.remark ?? undefined,
@ -363,6 +367,7 @@ export class CircuitWriteService {
rcdAssignment: sourceCircuit.rcdAssignment ?? undefined,
terminalDesignation: sourceCircuit.terminalDesignation ?? undefined,
voltage: sourceCircuit.voltage ?? undefined,
controlRequirement: sourceCircuit.controlRequirement ?? undefined,
status: sourceCircuit.status ?? undefined,
isReserve: true,
remark: sourceCircuit.remark ?? undefined,
@ -385,6 +390,7 @@ export class CircuitWriteService {
rcdAssignment: targetCircuit.rcdAssignment ?? undefined,
terminalDesignation: targetCircuit.terminalDesignation ?? undefined,
voltage: targetCircuit.voltage ?? undefined,
controlRequirement: targetCircuit.controlRequirement ?? undefined,
status: targetCircuit.status ?? undefined,
isReserve: false,
remark: targetCircuit.remark ?? undefined,
@ -485,6 +491,7 @@ export class CircuitWriteService {
rcdAssignment: sourceCircuit.rcdAssignment ?? undefined,
terminalDesignation: sourceCircuit.terminalDesignation ?? undefined,
voltage: sourceCircuit.voltage ?? undefined,
controlRequirement: sourceCircuit.controlRequirement ?? undefined,
status: sourceCircuit.status ?? undefined,
isReserve: true,
remark: sourceCircuit.remark ?? undefined,
@ -507,6 +514,7 @@ export class CircuitWriteService {
rcdAssignment: targetCircuit.rcdAssignment ?? undefined,
terminalDesignation: targetCircuit.terminalDesignation ?? undefined,
voltage: targetCircuit.voltage ?? undefined,
controlRequirement: targetCircuit.controlRequirement ?? undefined,
status: targetCircuit.status ?? undefined,
isReserve: false,
remark: targetCircuit.remark ?? undefined,
@ -622,6 +630,7 @@ export class CircuitWriteService {
rcdAssignment: circuit.rcdAssignment ?? undefined,
terminalDesignation: circuit.terminalDesignation ?? undefined,
voltage: circuit.voltage ?? undefined,
controlRequirement: circuit.controlRequirement ?? undefined,
status: circuit.status ?? undefined,
isReserve: Boolean(circuit.isReserve),
remark: circuit.remark ?? undefined,

View file

@ -104,6 +104,7 @@ interface CircuitSnapshot {
rcdAssignment?: string;
terminalDesignation?: string;
voltage?: number;
controlRequirement?: string;
status?: string;
isReserve: boolean;
remark?: string;
@ -938,7 +939,7 @@ export function CircuitTreeEditor(props: { projectId: string; circuitListId: str
const payload: Record<string, unknown> = {};
if (key === "protectionSummary" || key === "cableSummary") {
payload.remark = draft.trim() === "" ? undefined : draft;
} else if (["protectionRatedCurrent", "cableLength"].includes(key)) {
} else if (["protectionRatedCurrent", "cableLength", "voltage"].includes(key)) {
payload[key] = parseNumeric(key, draft);
} else if (key === "isReserve") {
const normalized = draft.trim().toLowerCase();
@ -1510,6 +1511,7 @@ export function CircuitTreeEditor(props: { projectId: string; circuitListId: str
rcdAssignment: found.rcdAssignment ?? undefined,
terminalDesignation: found.terminalDesignation ?? undefined,
voltage: found.voltage ?? undefined,
controlRequirement: found.controlRequirement ?? undefined,
status: found.status ?? undefined,
isReserve: found.isReserve,
remark: found.remark ?? undefined,
@ -1534,6 +1536,7 @@ export function CircuitTreeEditor(props: { projectId: string; circuitListId: str
rcdAssignment: snapshot.rcdAssignment,
terminalDesignation: snapshot.terminalDesignation,
voltage: snapshot.voltage,
controlRequirement: snapshot.controlRequirement,
status: snapshot.status,
isReserve: snapshot.isReserve,
remark: snapshot.remark,

View file

@ -270,6 +270,7 @@ export interface CircuitTreeCircuitDto {
rcdAssignment?: string;
terminalDesignation?: string;
voltage?: number;
controlRequirement?: string;
status?: string;
isReserve: boolean;
remark?: string;
@ -317,6 +318,7 @@ export interface CreateCircuitInputDto {
rcdAssignment?: string;
terminalDesignation?: string;
voltage?: number;
controlRequirement?: string;
status?: string;
isReserve?: boolean;
remark?: string;

View file

@ -29,6 +29,8 @@ export type CellKey =
| "cableLength"
| "rcdAssignment"
| "terminalDesignation"
| "voltage"
| "controlRequirement"
| "status"
| "isReserve";
@ -81,6 +83,8 @@ export const allColumns: ColumnDef[] = [
{ key: "cableLength", label: "Cable length", numeric: true },
{ key: "rcdAssignment", label: "RCD assignment" },
{ key: "terminalDesignation", label: "Terminal designation" },
{ key: "voltage", label: "Voltage", numeric: true },
{ key: "controlRequirement", label: "Control requirement" },
{ key: "status", label: "Status" },
{ key: "isReserve", label: "Reserve" },
];
@ -119,6 +123,8 @@ export const circuitOnlyColumns = new Set<CellKey>([
"cableLength",
"rcdAssignment",
"terminalDesignation",
"voltage",
"controlRequirement",
"status",
"isReserve",
]);
@ -154,6 +160,8 @@ const circuitFieldKeys = new Set<CellKey>([
"cableSummary",
"rcdAssignment",
"terminalDesignation",
"voltage",
"controlRequirement",
"status",
"isReserve",
"remark",
@ -226,6 +234,8 @@ export function getCircuitValue(circuit: CircuitTreeCircuitDto, key: CellKey): G
case "cableLength": return circuit.cableLength;
case "rcdAssignment": return circuit.rcdAssignment;
case "terminalDesignation": return circuit.terminalDesignation;
case "voltage": return circuit.voltage;
case "controlRequirement": return circuit.controlRequirement;
case "status": return circuit.status;
case "isReserve": return circuit.isReserve;
case "remark": return circuit.remark;

View file

@ -109,6 +109,7 @@ export async function getCircuitTree(req: Request, res: Response) {
rcdAssignment: circuit.rcdAssignment ?? undefined,
terminalDesignation: circuit.terminalDesignation ?? undefined,
voltage: circuit.voltage ?? undefined,
controlRequirement: circuit.controlRequirement ?? undefined,
status: circuit.status ?? undefined,
isReserve: Boolean(circuit.isReserve),
remark: circuit.remark ?? undefined,

View file

@ -14,6 +14,7 @@ export const createCircuitSchema = z.object({
rcdAssignment: z.string().optional(),
terminalDesignation: z.string().optional(),
voltage: z.number().positive().optional(),
controlRequirement: z.string().optional(),
status: z.string().optional(),
isReserve: z.boolean().optional(),
remark: z.string().optional(),