first commit

This commit is contained in:
2026-04-30 18:22:10 +02:00
commit c3e98af5b6
36 changed files with 4779 additions and 0 deletions
@@ -0,0 +1,29 @@
export interface PowerInput {
quantity: number;
installedPowerPerUnitKw: number;
demandFactor: number;
}
export interface CurrentInput {
demandPowerKw: number;
voltageV: number;
phaseCount: 1 | 3;
powerFactor: number;
}
export function calculateInstalledPowerKw(input: PowerInput): number {
return input.quantity * input.installedPowerPerUnitKw;
}
export function calculateDemandPowerKw(input: PowerInput): number {
return calculateInstalledPowerKw(input) * input.demandFactor;
}
export function calculateCurrentA(input: CurrentInput): number {
const powerW = input.demandPowerKw * 1000;
if (input.phaseCount === 1) {
return powerW / (input.voltageV * input.powerFactor);
}
return powerW / (Math.sqrt(3) * input.voltageV * input.powerFactor);
}
+15
View File
@@ -0,0 +1,15 @@
export interface Consumer {
id: string;
projectId: string;
distributionBoardId?: string;
name: string;
category?: string;
quantity: number;
installedPowerPerUnitKw: number;
demandFactor: number;
voltageV?: number;
phaseCount?: 1 | 3;
powerFactor?: number;
note?: string;
}
@@ -0,0 +1,45 @@
import {
calculateCurrentA,
calculateDemandPowerKw,
calculateInstalledPowerKw,
} from "../calculations/power-calculation.js";
import type { Consumer } from "../models/consumer.model.js";
export interface ConsumerWithCalculatedValues extends Consumer {
installedPowerKw: number;
demandPowerKw: number;
currentA?: number;
}
export class PowerBalanceService {
enrichConsumer(consumer: Consumer): ConsumerWithCalculatedValues {
const installedPowerKw = calculateInstalledPowerKw({
quantity: consumer.quantity,
installedPowerPerUnitKw: consumer.installedPowerPerUnitKw,
demandFactor: consumer.demandFactor,
});
const demandPowerKw = calculateDemandPowerKw({
quantity: consumer.quantity,
installedPowerPerUnitKw: consumer.installedPowerPerUnitKw,
demandFactor: consumer.demandFactor,
});
let currentA: number | undefined;
if (consumer.voltageV && consumer.phaseCount && consumer.powerFactor) {
currentA = calculateCurrentA({
demandPowerKw,
voltageV: consumer.voltageV,
phaseCount: consumer.phaseCount,
powerFactor: consumer.powerFactor,
});
}
return {
...consumer,
installedPowerKw,
demandPowerKw,
currentA,
};
}
}