Skip to content

Commit de25cc7

Browse files
authored
Merge pull request #313 from NHSDigital/generate-cohort-fix-duplicates
Cohort bugfix
2 parents 3837c44 + eb2263e commit de25cc7

File tree

1 file changed

+44
-36
lines changed

1 file changed

+44
-36
lines changed

performance-tests/E2E/generate-cohort.jmx

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
</elementProp>
2121
</ThreadGroup>
2222
<hashTree>
23-
<JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="Generate cohort row" enabled="true">
23+
<JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="Generate cohort row">
2424
<stringProp name="cacheKey">true</stringProp>
2525
<stringProp name="filename"></stringProp>
2626
<stringProp name="parameters"></stringProp>
@@ -59,6 +59,7 @@ def CHILD_SCHOOL_URN =[]
5959

6060
def startDate = Date.parse(&apos;yyyy-MM-dd&apos;,&apos;2011-09-01&apos;)
6161
def endDate = Date.parse(&apos;yyyy-MM-dd&apos;,&apos;2012-08-31&apos;)
62+
def newNHSNumbers = []
6263

6364
try {
6465
reader = new BufferedReader(new FileReader(vars.get(&quot;BaseDirectory&quot;) + vars.get(&quot;SourceCohort&quot;)));
@@ -105,42 +106,49 @@ writer.println(&quot;CHILD_ADDRESS_LINE_1,CHILD_ADDRESS_LINE_2,CHILD_POSTCODE,CH
105106
rowcount=vars.get(&quot;RowCount&quot;).toInteger()
106107

107108
for(outrow=1;outrow&lt;=rowcount;outrow++){
108-
vars.put(&quot;CHILD_ADDRESS_LINE_1&quot;,r.nextInt(100000).toString() + &quot; &quot; + CHILD_ADDRESS_LINE_1.get(r.nextInt(CHILD_ADDRESS_LINE_1.size())).tokenize(&apos; &apos;)[-2] + &quot; &quot; + CHILD_ADDRESS_LINE_1.get(r.nextInt(CHILD_ADDRESS_LINE_1.size())).tokenize(&apos; &apos;).last())
109-
vars.put(&quot;CHILD_ADDRESS_LINE_2&quot;,CHILD_ADDRESS_LINE_2.get(r.nextInt(CHILD_ADDRESS_LINE_2.size())).tokenize(&apos; &apos;).first() + &quot; &quot; + CHILD_ADDRESS_LINE_2.get(r.nextInt(CHILD_ADDRESS_LINE_2.size())).tokenize(&apos; &apos;).last())
110-
vars.put(&quot;CHILD_POSTCODE&quot;,CHILD_POSTCODE.get(r.nextInt(CHILD_POSTCODE.size())).tokenize(&apos; &apos;).first() + &quot; &quot; + CHILD_POSTCODE.get(r.nextInt(CHILD_POSTCODE.size())).tokenize(&apos; &apos;).last())
111-
vars.put(&quot;CHILD_TOWN&quot;,CHILD_TOWN.get(r.nextInt(CHILD_TOWN.size())))
112-
vars.put(&quot;CHILD_PREFERRED_GIVEN_NAME&quot;,&quot;&quot;)
113-
vars.put(&quot;CHILD_DATE_OF_BIRTH&quot;,(startDate + r.nextInt(endDate-startDate)).format(&apos;yyyy-MM-dd&apos;))
114-
vars.put(&quot;CHILD_FIRST_NAME&quot;,CHILD_FIRST_NAME.get(r.nextInt(CHILD_FIRST_NAME.size())))
115-
vars.put(&quot;CHILD_LAST_NAME&quot;,CHILD_LAST_NAME.get(r.nextInt(CHILD_LAST_NAME.size())))
116-
117-
checkdigit=&quot;10&quot;
118-
while(checkdigit==&quot;10&quot;){
119-
nhsnumber=(r.nextInt(999999) + 999000000).toString()
120-
checkdigit = (11-(nhsnumber[0].toInteger()*10 + nhsnumber[1].toInteger()*9 + nhsnumber[2].toInteger()*8 + nhsnumber[3].toInteger()*7 + nhsnumber[4].toInteger()*6 + nhsnumber[5].toInteger()*5 + nhsnumber[6].toInteger()*4 + nhsnumber[7].toInteger()*3 + nhsnumber[8].toInteger()*2) % 11).toString()
121-
if(checkdigit==&quot;11&quot;){
122-
checkdigit=&quot;0&quot;
109+
vars.put(&quot;CHILD_ADDRESS_LINE_1&quot;,r.nextInt(100000).toString() + &quot; &quot; + CHILD_ADDRESS_LINE_1.get(r.nextInt(CHILD_ADDRESS_LINE_1.size())).tokenize(&apos; &apos;)[-2] + &quot; &quot; + CHILD_ADDRESS_LINE_1.get(r.nextInt(CHILD_ADDRESS_LINE_1.size())).tokenize(&apos; &apos;).last())
110+
vars.put(&quot;CHILD_ADDRESS_LINE_2&quot;,CHILD_ADDRESS_LINE_2.get(r.nextInt(CHILD_ADDRESS_LINE_2.size())).tokenize(&apos; &apos;).first() + &quot; &quot; + CHILD_ADDRESS_LINE_2.get(r.nextInt(CHILD_ADDRESS_LINE_2.size())).tokenize(&apos; &apos;).last())
111+
vars.put(&quot;CHILD_POSTCODE&quot;,CHILD_POSTCODE.get(r.nextInt(CHILD_POSTCODE.size())).tokenize(&apos; &apos;).first() + &quot; &quot; + CHILD_POSTCODE.get(r.nextInt(CHILD_POSTCODE.size())).tokenize(&apos; &apos;).last())
112+
vars.put(&quot;CHILD_TOWN&quot;,CHILD_TOWN.get(r.nextInt(CHILD_TOWN.size())))
113+
vars.put(&quot;CHILD_PREFERRED_GIVEN_NAME&quot;,&quot;&quot;)
114+
vars.put(&quot;CHILD_DATE_OF_BIRTH&quot;,(startDate + r.nextInt(endDate-startDate)).format(&apos;yyyy-MM-dd&apos;))
115+
vars.put(&quot;CHILD_FIRST_NAME&quot;,CHILD_FIRST_NAME.get(r.nextInt(CHILD_FIRST_NAME.size())))
116+
vars.put(&quot;CHILD_LAST_NAME&quot;,CHILD_LAST_NAME.get(r.nextInt(CHILD_LAST_NAME.size())))
117+
118+
checkdigit=&quot;10&quot;
119+
while(checkdigit==&quot;10&quot;){
120+
nhsnumber=(r.nextInt(999999) + 999000000).toString()
121+
checkdigit = (11-(nhsnumber[0].toInteger()*10 + nhsnumber[1].toInteger()*9 + nhsnumber[2].toInteger()*8 + nhsnumber[3].toInteger()*7 + nhsnumber[4].toInteger()*6 + nhsnumber[5].toInteger()*5 + nhsnumber[6].toInteger()*4 + nhsnumber[7].toInteger()*3 + nhsnumber[8].toInteger()*2) % 11).toString()
122+
if(checkdigit==&quot;11&quot;){
123+
checkdigit=&quot;0&quot;
124+
}
125+
nhsnumber=nhsnumber + checkdigit
126+
// Check the NHS number hasn&apos;t been used before
127+
if(newNHSNumbers.contains(nhsnumber)){
128+
log.error(&quot;found a duplicate &quot; + nhsnumber)
129+
checkdigit=&quot;10&quot; //force the while loop to retry
130+
}
123131
}
124-
nhsnumber=nhsnumber + checkdigit
125-
}
126-
vars.put(&quot;CHILD_NHS_NUMBER&quot;,nhsnumber)
127-
128-
vars.put(&quot;PARENT_1_NAME&quot;,PARENT_1_NAME.get(r.nextInt(PARENT_1_NAME.size())).tokenize(&apos; &apos;).first() + &quot; &quot; + vars.get(&quot;CHILD_LAST_NAME&quot;))
129-
vars.put(&quot;PARENT_2_NAME&quot;,PARENT_2_NAME.get(r.nextInt(PARENT_2_NAME.size())).tokenize(&apos; &apos;).first() + &quot; &quot; + vars.get(&quot;CHILD_LAST_NAME&quot;))
130-
vars.put(&quot;PARENT_1_EMAIL&quot;,vars.get(&quot;PARENT_1_NAME&quot;).replaceAll(&apos; &apos;,&apos;.&apos;) + &quot;@example.com&quot;)
131-
vars.put(&quot;PARENT_2_EMAIL&quot;,vars.get(&quot;PARENT_2_NAME&quot;).replaceAll(&apos; &apos;,&apos;.&apos;) + &quot;@example.com&quot;)
132-
vars.put(&quot;PARENT_1_PHONE&quot;,PARENT_1_PHONE.get(r.nextInt(PARENT_1_PHONE.size())))
133-
vars.put(&quot;PARENT_2_PHONE&quot;,PARENT_2_PHONE.get(r.nextInt(PARENT_2_PHONE.size())))
134-
vars.put(&quot;PARENT_1_RELATIONSHIP&quot;,PARENT_1_RELATIONSHIP.get(r.nextInt(PARENT_1_RELATIONSHIP.size())))
135-
vars.put(&quot;PARENT_2_RELATIONSHIP&quot;,PARENT_2_RELATIONSHIP.get(r.nextInt(PARENT_2_RELATIONSHIP.size())))
136-
137-
vars.put(&quot;CHILD_SCHOOL_URN&quot;,vars.get(&quot;URN&quot;))
138-
139-
rowPartOne=(vars.get(&quot;CHILD_ADDRESS_LINE_1&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_ADDRESS_LINE_2&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_POSTCODE&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_TOWN&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_PREFERRED_GIVEN_NAME&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_DATE_OF_BIRTH&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_FIRST_NAME&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_LAST_NAME&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_NHS_NUMBER&quot;) + &quot;,&quot;)
140-
rowPartTwo=(vars.get(&quot;PARENT_1_EMAIL&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_1_NAME&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_1_PHONE&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_1_RELATIONSHIP&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_2_EMAIL&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_2_NAME&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_2_PHONE&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_2_RELATIONSHIP&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_SCHOOL_URN&quot;))
141-
142-
writer.println(rowPartOne + rowPartTwo)
143-
log.info(vars.get(&quot;CHILD_FIRST_NAME&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_LAST_NAME&quot;))
132+
//Add the unique nhs number to the array
133+
newNHSNumbers.add(nhsnumber)
134+
vars.put(&quot;CHILD_NHS_NUMBER&quot;,nhsnumber)
135+
136+
vars.put(&quot;PARENT_1_NAME&quot;,PARENT_1_NAME.get(r.nextInt(PARENT_1_NAME.size())).tokenize(&apos; &apos;).first() + &quot; &quot; + vars.get(&quot;CHILD_LAST_NAME&quot;))
137+
vars.put(&quot;PARENT_2_NAME&quot;,PARENT_2_NAME.get(r.nextInt(PARENT_2_NAME.size())).tokenize(&apos; &apos;).first() + &quot; &quot; + vars.get(&quot;CHILD_LAST_NAME&quot;))
138+
vars.put(&quot;PARENT_1_EMAIL&quot;,vars.get(&quot;PARENT_1_NAME&quot;).replaceAll(&apos; &apos;,&apos;.&apos;) + &quot;@example.com&quot;)
139+
vars.put(&quot;PARENT_2_EMAIL&quot;,vars.get(&quot;PARENT_2_NAME&quot;).replaceAll(&apos; &apos;,&apos;.&apos;) + &quot;@example.com&quot;)
140+
vars.put(&quot;PARENT_1_PHONE&quot;,PARENT_1_PHONE.get(r.nextInt(PARENT_1_PHONE.size())))
141+
vars.put(&quot;PARENT_2_PHONE&quot;,PARENT_2_PHONE.get(r.nextInt(PARENT_2_PHONE.size())))
142+
vars.put(&quot;PARENT_1_RELATIONSHIP&quot;,PARENT_1_RELATIONSHIP.get(r.nextInt(PARENT_1_RELATIONSHIP.size())))
143+
vars.put(&quot;PARENT_2_RELATIONSHIP&quot;,PARENT_2_RELATIONSHIP.get(r.nextInt(PARENT_2_RELATIONSHIP.size())))
144+
145+
vars.put(&quot;CHILD_SCHOOL_URN&quot;,vars.get(&quot;URN&quot;))
146+
147+
rowPartOne=(vars.get(&quot;CHILD_ADDRESS_LINE_1&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_ADDRESS_LINE_2&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_POSTCODE&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_TOWN&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_PREFERRED_GIVEN_NAME&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_DATE_OF_BIRTH&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_FIRST_NAME&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_LAST_NAME&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_NHS_NUMBER&quot;) + &quot;,&quot;)
148+
rowPartTwo=(vars.get(&quot;PARENT_1_EMAIL&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_1_NAME&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_1_PHONE&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_1_RELATIONSHIP&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_2_EMAIL&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_2_NAME&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_2_PHONE&quot;) + &quot;,&quot; + vars.get(&quot;PARENT_2_RELATIONSHIP&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_SCHOOL_URN&quot;))
149+
150+
writer.println(rowPartOne + rowPartTwo)
151+
// log.info(vars.get(&quot;CHILD_FIRST_NAME&quot;) + &quot;,&quot; + vars.get(&quot;CHILD_LAST_NAME&quot;))
144152
}
145153

146154
writer.flush();

0 commit comments

Comments
 (0)