Add distribution power summaries

This commit is contained in:
2026-07-29 19:02:18 +02:00
parent dcb303284c
commit 9ea081179d
28 changed files with 2668 additions and 77 deletions
@@ -1,7 +1,10 @@
import type { Request, Response } from "express";
import {
applyDistributionBoardSimultaneityFactor,
calculateCircuitTotalPower,
calculateDistributionBoardTotalPower,
calculateRowTotalPower,
calculateSectionTotalPower,
} from "../../domain/calculations/circuit-power-calculation.js";
import type { CircuitTreeResponse } from "../../domain/models/circuit-tree.model.js";
import {
@@ -9,6 +12,7 @@ import {
circuitListRepository,
circuitRepository,
circuitSectionRepository,
distributionBoardRepository,
projectRepository,
} from "../composition/application-repositories.js";
@@ -37,6 +41,16 @@ export async function getCircuitTree(req: Request, res: Response) {
if (!project) {
return res.status(404).json({ error: "Project not found" });
}
const distributionBoard =
await distributionBoardRepository.findById(
projectId,
list.distributionBoardId
);
if (!distributionBoard) {
return res.status(404).json({
error: "Distribution board not found",
});
}
try {
const sections = await circuitSectionRepository.listByCircuitList(circuitListId);
@@ -57,12 +71,17 @@ export async function getCircuitTree(req: Request, res: Response) {
currentRevision: project.currentRevision,
singlePhaseVoltageV: project.singlePhaseVoltageV,
threePhaseVoltageV: project.threePhaseVoltageV,
distributionBoardSimultaneityFactor:
distributionBoard.simultaneityFactor,
distributionBoardTotalPower: 0,
distributionBoardTotalPowerWithSimultaneityFactor: 0,
sections: sections.map((section) => ({
id: section.id,
key: section.key,
displayName: section.displayName,
prefix: section.prefix,
sortOrder: section.sortOrder,
sectionTotalPower: 0,
circuits: [],
})),
};
@@ -123,6 +142,19 @@ export async function getCircuitTree(req: Request, res: Response) {
});
}
for (const section of tree.sections) {
section.sectionTotalPower = calculateSectionTotalPower(
section.circuits
);
}
tree.distributionBoardTotalPower =
calculateDistributionBoardTotalPower(tree.sections);
tree.distributionBoardTotalPowerWithSimultaneityFactor =
applyDistributionBoardSimultaneityFactor(
tree.distributionBoardTotalPower,
tree.distributionBoardSimultaneityFactor
);
return res.json(tree);
} catch (error) {
if (isMissingCircuitTreeSchemaError(error)) {
@@ -131,6 +163,10 @@ export async function getCircuitTree(req: Request, res: Response) {
currentRevision: project.currentRevision,
singlePhaseVoltageV: project.singlePhaseVoltageV,
threePhaseVoltageV: project.threePhaseVoltageV,
distributionBoardSimultaneityFactor:
distributionBoard.simultaneityFactor,
distributionBoardTotalPower: 0,
distributionBoardTotalPowerWithSimultaneityFactor: 0,
sections: [],
warning:
"Circuit-first tables are not available yet. Run database migrations (including 0008_circuit_first_model).",
@@ -51,7 +51,10 @@ export async function createDistributionBoard(req: Request, res: Response) {
});
return res.status(201).json({
...result,
distributionBoard: structure.distributionBoard,
distributionBoard: {
...structure.distributionBoard,
simultaneityFactor: 1,
},
});
} catch (error) {
return respondWithProjectCommandError(error, res);
@@ -83,6 +86,7 @@ export async function updateDistributionBoard(
{
floorId: parsed.data.floorId,
supplyType: parsed.data.supplyType,
simultaneityFactor: parsed.data.simultaneityFactor,
}
),
});