feat(falukant): implement score threshold logic and enhance UI feedback for certificate progression
All checks were successful
Deploy to production / deploy (push) Successful in 3m3s

- Added a new function to calculate score thresholds based on certificate levels, improving the logic for determining promotion eligibility.
- Updated the FalukantService to include new properties for score and requirement checks, enhancing the decision-making process for certificate readiness.
- Enhanced the OverviewView component to display detailed hints and states regarding certificate progression, providing users with clearer feedback on their status.
- Localized new strings in multiple languages to support the updated UI elements and hints, improving user experience across different languages.
This commit is contained in:
Torsten Schulz (local)
2026-04-01 15:47:11 +02:00
parent d39cea2c01
commit 10fc78e81d
6 changed files with 143 additions and 8 deletions

View File

@@ -130,8 +130,21 @@
"levelMatrix": "Mga produkto per certificate level",
"levelLabel": "Level {level}",
"score": "Puntos",
"scoreGate": "Kinahanglan nga puntos para sa sunod nga level",
"ready": "Andam na para sa sunod nga promotion",
"notReady": "Wala pa maabot ang mga kinahanglanon",
"state": {
"ready": "Pwede na ang promotion sumala sa daemon",
"minimumsMetScoreBlocked": "Naabot na ang minimum, pero gipugngan pa sa puntos",
"scoreMetMinimumsMissing": "Sakto na ang puntos, pero kulang pa ang minimum nga kinahanglanon",
"notReady": "Dili pa andam para sa promotion"
},
"hint": {
"ready": "Para sa level {next}, naabot na ang minimum nga mga kinahanglanon ug ang score threshold nga {threshold}.",
"minimumsMetScoreBlocked": "Naabot na ang makita nga minimum nga mga kinahanglanon para sa level {next}, pero motugot lang ang daemon sa promotion kung maabot sa weighted score ang threshold nga {threshold}. Sa pagkakaron, kutob ra sa level {target} ang score.",
"scoreMetMinimumsMissing": "Ang weighted score igo na unta para sa level {next}, pero naa pay kulang nga minimum nga kinahanglanon.",
"notReady": "Para sa level {next}, kinahanglan maabot ang minimum nga mga kinahanglanon ug ang score threshold nga {threshold}."
},
"factors": "Karon nga mga bili",
"requirements": "Mga kinahanglanon sa sunod nga level"
},

View File

@@ -150,8 +150,21 @@
"levelMatrix": "Produkte nach Zertifikatsstufe",
"levelLabel": "Stufe {level}",
"score": "Wertung",
"scoreGate": "Wertungsgrenze für die nächste Stufe",
"ready": "Für den nächsten Aufstieg bereit",
"notReady": "Bedingungen noch nicht erfüllt",
"state": {
"ready": "Aufstieg aus Daemon-Sicht möglich",
"minimumsMetScoreBlocked": "Mindestanforderungen erfüllt, Wertung blockiert noch",
"scoreMetMinimumsMissing": "Wertung reicht, Mindestanforderungen fehlen noch",
"notReady": "Noch nicht aufstiegsbereit"
},
"hint": {
"ready": "Für Stufe {next} sind sowohl die Mindestanforderungen als auch die Wertungsgrenze von {threshold} erreicht.",
"minimumsMetScoreBlocked": "Die sichtbaren Mindestanforderungen für Stufe {next} sind erfüllt, aber der Daemon lässt den Aufstieg erst zu, wenn die gewichtete Wertung die Schwelle {threshold} erreicht. Aktuell reicht die Wertung nur bis Stufe {target}.",
"scoreMetMinimumsMissing": "Die gewichtete Wertung reicht grundsätzlich für Stufe {next}, aber mindestens eine Mindestanforderung ist noch nicht erfüllt.",
"notReady": "Für Stufe {next} müssen sowohl die Mindestanforderungen als auch die Wertungsgrenze von {threshold} erfüllt sein."
},
"factors": "Aktuelle Werte",
"requirements": "Bedingungen für die nächste Stufe",
"factor": {

View File

@@ -131,8 +131,21 @@
"levelMatrix": "Products by certificate level",
"levelLabel": "Level {level}",
"score": "Score",
"scoreGate": "Score threshold for the next level",
"ready": "Ready for the next promotion",
"notReady": "Requirements not met yet",
"state": {
"ready": "Promotion possible from the daemon's perspective",
"minimumsMetScoreBlocked": "Minimum requirements met, but score still blocks promotion",
"scoreMetMinimumsMissing": "Score is sufficient, minimum requirements still missing",
"notReady": "Not ready for promotion yet"
},
"hint": {
"ready": "For level {next}, both the minimum requirements and the score threshold of {threshold} are met.",
"minimumsMetScoreBlocked": "The visible minimum requirements for level {next} are met, but the daemon will only allow promotion once the weighted score reaches the threshold {threshold}. Right now the score only reaches level {target}.",
"scoreMetMinimumsMissing": "The weighted score is generally high enough for level {next}, but at least one minimum requirement is still missing.",
"notReady": "For level {next}, both the minimum requirements and the score threshold of {threshold} must be met."
},
"factors": "Current values",
"requirements": "Requirements for the next level",
"factor": {

View File

@@ -136,8 +136,21 @@
"levelMatrix": "Productos por nivel de certificado",
"levelLabel": "Nivel {level}",
"score": "Puntuación",
"scoreGate": "Umbral de puntuación para el siguiente nivel",
"ready": "Listo para el siguiente ascenso",
"notReady": "Condiciones aún no cumplidas",
"state": {
"ready": "Ascenso posible desde la perspectiva del daemon",
"minimumsMetScoreBlocked": "Requisitos mínimos cumplidos, pero la puntuación aún bloquea el ascenso",
"scoreMetMinimumsMissing": "La puntuación alcanza, pero aún faltan requisitos mínimos",
"notReady": "Todavía no está listo para ascender"
},
"hint": {
"ready": "Para el nivel {next} se cumplen tanto los requisitos mínimos como el umbral de puntuación de {threshold}.",
"minimumsMetScoreBlocked": "Los requisitos mínimos visibles para el nivel {next} están cumplidos, pero el daemon solo permitirá el ascenso cuando la puntuación ponderada alcance el umbral {threshold}. Ahora mismo la puntuación solo alcanza hasta el nivel {target}.",
"scoreMetMinimumsMissing": "La puntuación ponderada ya sería suficiente para el nivel {next}, pero todavía falta al menos un requisito mínimo.",
"notReady": "Para el nivel {next} deben cumplirse tanto los requisitos mínimos como el umbral de puntuación de {threshold}."
},
"factors": "Valores actuales",
"requirements": "Condiciones para el siguiente nivel",
"factor": {