Skip to content

Commit c2557c0

Browse files
committed
WIP test validations
1 parent bbe571b commit c2557c0

File tree

4 files changed

+87
-37
lines changed

4 files changed

+87
-37
lines changed

zorm/src/test/kotlin/com/zenmo/orm/companysurvey/ElectricityTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class ElectricityTest {
1616
)
1717
)
1818

19-
assertEquals(electricity.getContractedConnectionCapacityKw(), 3 * 80.0 * 230.0 * 0.001)
19+
assertEquals(electricity.getContractedDeliveryCapacityKw(), 3 * 80.0 * 230.0 * 0.001)
2020
}
2121

2222
@Test
@@ -27,6 +27,6 @@ class ElectricityTest {
2727
)
2828
)
2929

30-
assertEquals(electricity.getContractedConnectionCapacityKw(), 400.0)
30+
assertEquals(electricity.getContractedDeliveryCapacityKw(), 400.0)
3131
}
3232
}

zummon/src/commonMain/kotlin/companysurvey/Electricity.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,28 +34,28 @@ data class Electricity (
3434
fun getHasConnection(): Boolean {
3535
return hasConnection ?: false
3636
}
37-
38-
fun getContractedConnectionCapacityKw(): Double? {
39-
when(kleinverbruikOrGrootverbruik) {
40-
KleinverbruikOrGrootverbruik.GROOTVERBRUIK -> return grootverbruik?.contractedConnectionDeliveryCapacity_kW?.toDouble()
41-
KleinverbruikOrGrootverbruik.KLEINVERBRUIK -> return kleinverbruik?.connectionCapacity?.toKw()
42-
else -> return kleinverbruik?.connectionCapacity?.toKw() ?: grootverbruik?.contractedConnectionDeliveryCapacity_kW?.toDouble()
37+
38+
fun getPhysicalConnectionCapacityKw(): Double? {
39+
return when (kleinverbruikOrGrootverbruik) {
40+
KleinverbruikOrGrootverbruik.GROOTVERBRUIK -> grootverbruik?.physicalCapacityKw?.toDouble()
41+
KleinverbruikOrGrootverbruik.KLEINVERBRUIK -> kleinverbruik?.connectionCapacity?.toKw()
42+
else -> kleinverbruik?.connectionCapacity?.toKw() ?: grootverbruik?.physicalCapacityKw?.toDouble()
4343
}
4444
}
4545

46-
fun getPhysicalConnectionCapacityKw(): Double? {
47-
when(kleinverbruikOrGrootverbruik) {
48-
KleinverbruikOrGrootverbruik.GROOTVERBRUIK -> return grootverbruik?.physicalCapacityKw?.toDouble()
49-
KleinverbruikOrGrootverbruik.KLEINVERBRUIK -> return kleinverbruik?.connectionCapacity?.toKw()
50-
else -> return kleinverbruik?.connectionCapacity?.toKw() ?: grootverbruik?.physicalCapacityKw?.toDouble()
46+
fun getContractedDeliveryCapacityKw(): Double? {
47+
return when (kleinverbruikOrGrootverbruik) {
48+
KleinverbruikOrGrootverbruik.GROOTVERBRUIK -> grootverbruik?.contractedConnectionDeliveryCapacity_kW?.toDouble()
49+
KleinverbruikOrGrootverbruik.KLEINVERBRUIK -> kleinverbruik?.connectionCapacity?.toKw()
50+
else -> kleinverbruik?.connectionCapacity?.toKw() ?: grootverbruik?.contractedConnectionDeliveryCapacity_kW?.toDouble()
5151
}
5252
}
5353

5454
fun getContractedFeedInCapacityKw(): Double? {
55-
when (kleinverbruikOrGrootverbruik) {
56-
KleinverbruikOrGrootverbruik.GROOTVERBRUIK -> return grootverbruik?.contractedConnectionFeedInCapacity_kW?.toDouble()
57-
KleinverbruikOrGrootverbruik.KLEINVERBRUIK -> return kleinverbruik?.connectionCapacity?.toKw()
58-
else -> return kleinverbruik?.connectionCapacity?.toKw() ?: grootverbruik?.contractedConnectionFeedInCapacity_kW?.toDouble()
55+
return when (kleinverbruikOrGrootverbruik) {
56+
KleinverbruikOrGrootverbruik.GROOTVERBRUIK -> grootverbruik?.contractedConnectionFeedInCapacity_kW?.toDouble()
57+
KleinverbruikOrGrootverbruik.KLEINVERBRUIK -> kleinverbruik?.connectionCapacity?.toKw()
58+
else -> kleinverbruik?.connectionCapacity?.toKw() ?: grootverbruik?.contractedConnectionFeedInCapacity_kW?.toDouble()
5959
}
6060
}
6161
}

zummon/src/commonMain/kotlin/companysurvey/TimeSeries.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import kotlinx.datetime.Instant
1010
import kotlinx.datetime.TimeZone
1111
import kotlinx.datetime.toLocalDateTime
1212
import kotlin.js.JsExport
13+
import kotlin.time.Duration.Companion.hours
1314

1415

1516
/**
@@ -76,6 +77,7 @@ data class TimeSeries (
7677
return maxNullSequence
7778
}
7879

80+
fun getPeak(): DataPoint = DataPoint(values.max(), unit, timeStep)
7981

8082
/**
8183
* Get a full calendar year of data if it is present.
@@ -166,3 +168,29 @@ enum class TimeSeriesType {
166168
ELECTRICITY_PRODUCTION,
167169
GAS_DELIVERY,
168170
}
171+
172+
/**
173+
* Represents a single point within the time series.
174+
* Improvement: add timestamp
175+
*/
176+
data class DataPoint (
177+
val value: Float,
178+
val unit: TimeSeriesUnit,
179+
val timeStep: kotlin.time.Duration,
180+
) {
181+
fun kWh(): Double {
182+
if (this.unit != TimeSeriesUnit.KWH) {
183+
throw UnsupportedOperationException("Can only get the kWh from a kWh data point")
184+
}
185+
186+
return value.toDouble()
187+
}
188+
189+
fun kW(): Double {
190+
if (this.unit != TimeSeriesUnit.KWH) {
191+
throw UnsupportedOperationException("Can only get the kW from a kWh data point")
192+
}
193+
194+
return value * (this.timeStep / 1.hours)
195+
}
196+
}

zummon/src/commonMain/kotlin/companysurvey/Validation.kt

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ class GridConnectionValidator : Validator<GridConnection> {
5757
gridConnection.transport.vans.powerPerChargePointKw
5858
).map { (it ?: 0).toFloat() }.sum()
5959

60-
val contractedCapacity = (gridConnection.electricity.getContractedConnectionCapacityKw() ?: 0.0).toFloat()
60+
val contractedCapacity = (gridConnection.electricity.getContractedDeliveryCapacityKw() ?: 0.0).toFloat()
6161
val batteryPower = (gridConnection.storage.batteryPowerKw ?: 0.0).toFloat()
6262

6363
return if (totalPowerChargePoints < (contractedCapacity + batteryPower)) {
64-
listOf(ValidationResult(Status.VALID, translate("gridConnection.totalPowerChargePoints")))
64+
listOf(ValidationResult(Status.VALID, translate("gridConnection.totalPowerChargePointsValid")))
6565
} else {
6666
listOf(ValidationResult(Status.INVALID, translate("gridConnection.totalPowerChargePointsInvalid", totalPowerChargePoints, contractedCapacity + batteryPower)))
6767
}
@@ -235,7 +235,7 @@ class ElectricityValidator : Validator<Electricity> {
235235

236236
// Validator for contracted delivery capacity <= physical capacity
237237
fun validateContractedCapacity(electricity: Electricity): ValidationResult {
238-
val contractedCapacity = electricity.getContractedConnectionCapacityKw()
238+
val contractedCapacity = electricity.getContractedDeliveryCapacityKw()
239239
val physicalCapacity = electricity.getPhysicalConnectionCapacityKw()
240240

241241
return when {
@@ -289,7 +289,12 @@ class ElectricityValidator : Validator<Electricity> {
289289
} ?: false
290290

291291
if (isCloseEnough) {
292-
ValidationResult(Status.VALID, translate("electricity.annualFeedInValid", electricity.annualElectricityFeedIn_kWh, totalQuarterHourlyFeedIn))
292+
ValidationResult(
293+
Status.VALID, message(
294+
nl = "Jaarwaarde teruglevering ${electricity.annualElectricityFeedIn_kWh} kWh komt overeen met het totaal van de kwartierwaarden ${totalQuarterHourlyFeedIn} kWh",
295+
en = "Annual feed-in of ${electricity.annualElectricityFeedIn_kWh} kWh matches total of quarter-hourly feed-in ${totalQuarterHourlyFeedIn} kWh",
296+
)
297+
)
293298
} else {
294299
ValidationResult(Status.INVALID, translate("electricity.annualFeedInMismatch", electricity.annualElectricityFeedIn_kWh, totalQuarterHourlyFeedIn))
295300
}
@@ -339,14 +344,35 @@ class ElectricityValidator : Validator<Electricity> {
339344
}
340345
}
341346

342-
//peak of delivery should be less than contracted capacity
347+
// peak of delivery should be less than contracted capacity
343348
fun quarterHourlyDeliveryLowContractedCapacity(electricity: Electricity): ValidationResult {
344-
val contractedCapacity = (electricity.getContractedConnectionCapacityKw() ?: 0.0).toFloat()
345-
val pickDelivery = electricity.quarterHourlyDelivery_kWh?.values?.maxOrNull() ?: Float.MIN_VALUE
346-
return if ( pickDelivery <= contractedCapacity) {
347-
ValidationResult(Status.VALID, translate("electricity.quarterHourlyDeliveryLowContractedCapacityKw", contractedCapacity))
349+
val contractedCapacity_kW = electricity.getContractedDeliveryCapacityKw()
350+
if (contractedCapacity_kW == null) {
351+
return ValidationResult(Status.MISSING_DATA, message(
352+
en = "Gecontracteerd vermogen levering ontbreek",
353+
nl = "Contracted delivery capacity missing",
354+
))
355+
}
356+
357+
if (electricity.quarterHourlyDelivery_kWh == null) {
358+
return ValidationResult(Status.MISSING_DATA, message(
359+
en = "Kwartierwaarden levering ontbreek",
360+
nl = "Quarter-hourly delivery missing",
361+
))
362+
}
363+
364+
val peakDelivery = electricity.quarterHourlyDelivery_kWh.getPeak()
365+
366+
return if ( peakDelivery.kW() <= contractedCapacity_kW) {
367+
ValidationResult(Status.VALID, message(
368+
en = "Piek van kwartierwaarden levering ${peakDelivery.kWh()} kWh valt binnen gecontracteerd vermogen levering ${contractedCapacity_kW} kW",
369+
nl = "Peak of quarter-hourly delivery ${peakDelivery.kWh()} kWh does not exceed contracted capacity ${contractedCapacity_kW} kW",
370+
))
348371
} else {
349-
ValidationResult(Status.INVALID, translate("electricity.quarterHourlyDeliveryHighContractedCapacityKw", contractedCapacity))
372+
ValidationResult(Status.INVALID, message(
373+
nl = "Piek van kwartierwaarden levering ${peakDelivery.kWh()} kWh mag niet hoger zijn dan gecontracteerd vermogen levering ${contractedCapacity_kW} kW",
374+
en = "Peak of quarter-hourly ${peakDelivery.kWh()} kWh delivery should be below contracted capacity ${contractedCapacity_kW} Kw",
375+
))
350376
}
351377
}
352378

@@ -528,7 +554,12 @@ class TransportValidator {
528554
fun validateTotalElectricVans(transport: Transport): ValidationResult {
529555
return when {
530556
((transport.vans.numElectricVans ?: 0) > (transport.vans.numVans ?: 0)) -> ValidationResult(Status.INVALID, translate("transport.electricVansInvalid", transport.vans.numElectricVans, transport.vans.numVans))
531-
else -> ValidationResult(Status.VALID, translate("transport.electricVansValid"))
557+
else -> ValidationResult(
558+
Status.VALID, message(
559+
en = "Number of electric vans does not exceed the total number of Vans",
560+
nl = "Aantal elektrische bestelwagens valt binnen het totale aantal bestelwagens"
561+
)
562+
)
532563
}
533564
}
534565
}
@@ -594,11 +625,6 @@ val translations: Map<Language, Map<String, Map<String, String>>> = mapOf(
594625
// quarter
595626
"notEnoughValues" to "Not enough values for year: needed %d got %d",
596627
"annualFeedInMismatch" to "Annual feed in (%d) mismatch the total quarter hourly feed in (%d)",
597-
"annualFeedInMismatch" to "Annual feed in (%d) matches the total quarter hourly feed in (%d)",
598-
599-
"quarterHourlyDeliveryLowContractedCapacityKw" to "Quarter-hourly stays lower than the Contracted CapacityKw (%d)",
600-
"quarterHourlyDeliveryHighContractedCapacityKw" to "Quarter-hourly shouldn't go higher than the Contracted CapacityKw (%d)"
601-
602628
),
603629
"grootverbruik" to mapOf(
604630
"notProvided" to "Large consumption data is not provided",
@@ -661,11 +687,7 @@ val translations: Map<Language, Map<String, Map<String, String>>> = mapOf(
661687
"electricTrucksValid" to "Number of Electric Trucks is lower than the total of Trucks",
662688
"electricTrucksInvalid" to "Number of electric trucks %d exceeds the total number of trucks %d",
663689

664-
"electricVansValid" to "Number of Electric Vans is lower than the total of Vans",
665690
"electricVansInvalid" to "Number of electric vans %d exceeds the total number of vans %d",
666-
667-
"quarterHourlyDeliveryLowContractedCapacityKw" to "Kwartuur levering blijft lager dan de Contractuele CapaciteitKw (%d)",
668-
"quarterHourlyDeliveryHighContractedCapacityKw" to "Kwartuur levering mag niet hoger zijn dan de Contractuele CapaciteitKw (%d)",
669691
),
670692
),
671693
Language.nl to mapOf(

0 commit comments

Comments
 (0)