Skip to content

Commit d9e462d

Browse files
frozenheliumsamshara
authored andcommitted
Improve calculation of yearly average for risk by month
- Add test for risk utils
1 parent 3ce3e45 commit d9e462d

File tree

2 files changed

+62
-4
lines changed

2 files changed

+62
-4
lines changed

src/utils/domain/risk.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { expect, test } from 'vitest';
2+
3+
import { CATEGORY_RISK_LOW, CATEGORY_RISK_VERY_LOW } from '#utils/constants';
4+
5+
import { riskScoreToCategory } from './risk.ts';
6+
7+
test('Risk score to category', () => {
8+
expect(
9+
riskScoreToCategory(
10+
0,
11+
'FL',
12+
),
13+
).toEqual(CATEGORY_RISK_VERY_LOW);
14+
expect(
15+
riskScoreToCategory(
16+
3,
17+
'FL',
18+
),
19+
).toEqual(CATEGORY_RISK_LOW);
20+
});

src/utils/domain/risk.ts

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export interface RiskDataItem {
7777
annual_average?: number | null,
7878
}
7979

80-
export const monthNumberToNameMap: Record<number, keyof RiskDataItem> = {
80+
const monthToKeyMap: Record<number, keyof RiskDataItem> = {
8181
0: 'january',
8282
1: 'february',
8383
2: 'march',
@@ -90,6 +90,10 @@ export const monthNumberToNameMap: Record<number, keyof RiskDataItem> = {
9090
9: 'october',
9191
10: 'november',
9292
11: 'december',
93+
};
94+
95+
export const monthNumberToNameMap: Record<number, keyof RiskDataItem> = {
96+
...monthToKeyMap,
9397
// FIXME: we should not have these different
9498
// class of data into same list
9599
12: 'annual_average',
@@ -100,8 +104,42 @@ export function getValueForSelectedMonths(
100104
riskDataItem: RiskDataItem | undefined,
101105
aggregationMode: 'sum' | 'max' = 'sum',
102106
) {
103-
if (isNotDefined(selectedMonths)) {
104-
return riskDataItem?.annual_average ?? undefined;
107+
let annualValue;
108+
109+
if (aggregationMode === 'sum') {
110+
annualValue = sumSafe([
111+
riskDataItem?.january,
112+
riskDataItem?.february,
113+
riskDataItem?.march,
114+
riskDataItem?.april,
115+
riskDataItem?.may,
116+
riskDataItem?.june,
117+
riskDataItem?.july,
118+
riskDataItem?.august,
119+
riskDataItem?.september,
120+
riskDataItem?.october,
121+
riskDataItem?.november,
122+
riskDataItem?.december,
123+
]);
124+
} else if (aggregationMode === 'max') {
125+
annualValue = maxSafe([
126+
riskDataItem?.january,
127+
riskDataItem?.february,
128+
riskDataItem?.march,
129+
riskDataItem?.april,
130+
riskDataItem?.may,
131+
riskDataItem?.june,
132+
riskDataItem?.july,
133+
riskDataItem?.august,
134+
riskDataItem?.september,
135+
riskDataItem?.october,
136+
riskDataItem?.november,
137+
riskDataItem?.december,
138+
]);
139+
}
140+
141+
if (isNotDefined(selectedMonths) || selectedMonths[12] === true) {
142+
return riskDataItem?.annual_average ?? annualValue ?? undefined;
105143
}
106144

107145
const monthKeys = Object.keys(
@@ -269,7 +307,7 @@ export function riskScoreToCategory(
269307
score: number | undefined | null,
270308
hazardType: HazardType,
271309
) {
272-
if (isNotDefined(score) || score <= 0) {
310+
if (isNotDefined(score) || score < 0) {
273311
return undefined;
274312
}
275313

0 commit comments

Comments
 (0)