Skip to content

Commit e7d3408

Browse files
committed
[NRL-1666] WIP Add NHS Number generator function to producer load tests
1 parent b3478cd commit e7d3408

File tree

1 file changed

+52
-14
lines changed

1 file changed

+52
-14
lines changed

tests/performance/producer/client_perftest.js

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -53,30 +53,68 @@ function randomNHSNumberInRange(start, end) {
5353
return start + rand;
5454
}
5555

56-
function generateValidNHSNumber(first9) {
57-
const first9Str = String(first9).padStart(9, "0");
58-
59-
if (first9Str.match(/^\d{9}$/)) {
60-
throw new Error(
61-
"bad NHS number generated - expected 9 digits",
62-
first9Str,
63-
first9
56+
function generateValidNHSNumber(start, end) {
57+
let nhsNumber = undefined;
58+
59+
while (!nhsNumber) {
60+
const seedNumber = randomNHSNumberInRange(start, end);
61+
const first9Str = String(seedNumber).padStart(9, "0").substring(0, 8);
62+
63+
console.log(
64+
`Generating NHS number from seed: ${seedNumber}, first 9 digits: ${first9Str}`
6465
);
66+
67+
if (first9Str.match(/^\d{9}$/)) {
68+
throw new Error(
69+
`bad NHS number generated - expected 9 digits: ${first9Str}, ${seedNumber}`
70+
);
71+
}
72+
73+
//parts_list = [
74+
// int(digit) * (10 - index)
75+
// for index, digit in enumerate(identifier_digits)
76+
//]
77+
//list_sum = sum(parts_list)
78+
//checksum = 11 - (list_sum % 11)
79+
//if checksum == 11:
80+
// checksum = 0
81+
//return checksum
82+
83+
const parts = [];
84+
const digits = first9Str.split("");
85+
for (let i = 0; i < digits.length; i++) {
86+
parts.push(parseInt(digits[i], 10) * (10 - i));
87+
}
88+
89+
const list_sum = parts.reduce((a, b) => a + b, 0);
90+
let checksum = 11 - (list_sum % 11);
91+
if (checksum === 11) {
92+
checksum = 0;
93+
}
94+
95+
console.log(
96+
`Generated NHS number parts: ${parts}, sum: ${list_sum}, checksum: ${checksum}`
97+
);
98+
99+
if (checksum === 10) {
100+
// Checksum of 10 means NHS number is invalid
101+
continue;
102+
}
103+
104+
nhsNumber = `${first9Str}${checksum}`;
105+
console.log(`Generated NHS number: ${nhsNumber}`);
65106
}
66107

67-
// NHS numbers not validated, checksum doesn't need to be legit
68-
return `${first9Str}${"1"}`;
108+
return nhsNumber;
69109
}
70110

71111
function pickNHSNumber() {
72112
if (Math.random() < ReuseNHSNumbersRatio) {
73113
// Reuse: pick within [NHSNumberStart, NHSNumberEnd]
74-
const first9 = randomNHSNumberInRange(NHSNumberStart, NHSNumberEnd);
75-
return generateValidNHSNumber(first9);
114+
return generateValidNHSNumber(NHSNumberStart, NHSNumberEnd);
76115
} else {
77116
// New: always pick from [NHSNumberEnd + 1, NHS_NUMBER_MAX]
78-
const first9 = randomNHSNumberInRange(NHSNumberEnd + 1, NHS_NUMBER_MAX);
79-
return generateValidNHSNumber(first9);
117+
return generateValidNHSNumber(NHSNumberEnd + 1, NHS_NUMBER_MAX);
80118
}
81119
}
82120

0 commit comments

Comments
 (0)