From 75d6cf17e8e9b7ae7a934698e732e9633e5f0d68 Mon Sep 17 00:00:00 2001 From: Erik van Velzen Date: Wed, 9 Oct 2024 17:00:48 +0200 Subject: [PATCH] Initial interface design for sanity checks Part of #137 --- .../kotlin/companysurvey/Validation.kt | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 zummon/src/commonMain/kotlin/companysurvey/Validation.kt diff --git a/zummon/src/commonMain/kotlin/companysurvey/Validation.kt b/zummon/src/commonMain/kotlin/companysurvey/Validation.kt new file mode 100644 index 00000000..d66165cb --- /dev/null +++ b/zummon/src/commonMain/kotlin/companysurvey/Validation.kt @@ -0,0 +1,42 @@ +package com.zenmo.zummon.companysurvey + +fun interface Validator { + fun validate(survey: Survey): ValidationResult +} + +data class ValidationResult( + val status: Status, + val message: String, +) + +enum class Status { + VALID, + INVALID, + MISSING_DATA, +} + +val validateContractedCapacity = Validator { survey: Survey -> + val gridConnection = survey.getSingleGridConnection() + + val contractedConnectionCapacity = gridConnection.electricity.getContractedConnectionCapacityKw() + val physicalConnectionCapacity = gridConnection.electricity.getPhysicalConnectionCapacityKw() + + return@Validator when { + contractedConnectionCapacity == null -> ValidationResult( + status = Status.MISSING_DATA, + message = "No contracted connection capacity given", + ) + physicalConnectionCapacity == null -> ValidationResult( + status = Status.MISSING_DATA, + message = "No physical connection capacity given", + ) + contractedConnectionCapacity <= physicalConnectionCapacity -> ValidationResult( + status = Status.VALID, + message = "Contracted connection capacity fits within physical connection", + ) + else -> ValidationResult( + status = Status.INVALID, + message = "Contracted connection capacity ${gridConnection.electricity.getContractedConnectionCapacityKw()} kW is too large for physical connection ${gridConnection.electricity.getPhysicalConnectionCapacityKw()}" + ) + } +}