@ministryofjustice/hmpps-arns-frontend-components-lib 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/arns/components/badge/macro.njk +0 -22
  2. package/dist/arns/components/badge/template.njk +38 -35
  3. package/dist/index.cjs.js +55 -165
  4. package/dist/index.cjs.js.map +1 -1
  5. package/dist/index.d.ts +26 -101
  6. package/dist/index.esm.js +55 -165
  7. package/dist/index.esm.js.map +1 -1
  8. package/dist/transformers/AllPredictorVersionedDtoToAssessmentsTransformer.d.ts +3 -0
  9. package/dist/types/AssessmentV1.d.ts +11 -0
  10. package/dist/types/AssessmentV2.d.ts +11 -0
  11. package/dist/types/Assessments.d.ts +3 -0
  12. package/dist/types/Predictor.d.ts +7 -0
  13. package/dist/types/RiskData.d.ts +2 -4
  14. package/dist/types/dtos/{allPredictorDto.d.ts → AllPredictorDto.d.ts} +8 -8
  15. package/dist/types/dtos/{allPredictorVersionedDto.d.ts → AllPredictorVersionedDto.d.ts} +2 -2
  16. package/dist/types/dtos/{basePredictorDto.d.ts → BasePredictorDto.d.ts} +1 -1
  17. package/dist/types/dtos/{ogpScoreDto.d.ts → OgpScoreDto.d.ts} +1 -1
  18. package/dist/types/dtos/{ogrScoreDto.d.ts → OgrScoreDto.d.ts} +1 -1
  19. package/dist/types/dtos/{ospScoreDto.d.ts → OspScoreDto.d.ts} +1 -1
  20. package/dist/types/dtos/{ovpScoreDto.d.ts → OvpScoreDto.d.ts} +1 -1
  21. package/dist/types/dtos/{rsrScoreDto.d.ts → RsrScoreDto.d.ts} +3 -3
  22. package/dist/types/dtos/{staticOrDynamicPredictorDto.d.ts → StaticOrDynamicPredictorDto.d.ts} +2 -2
  23. package/dist/types/dtos/{versionedStaticOrDynamicPredictorDto.d.ts → VersionedStaticOrDynamicPredictorDto.d.ts} +1 -1
  24. package/package.json +1 -1
  25. package/dist/components/badge/transformation.d.ts +0 -3
  26. package/dist/types/badgeData.d.ts +0 -12
  27. /package/dist/types/dtos/{assessmentStatusDto.d.ts → AssessmentStatusDto.d.ts} +0 -0
  28. /package/dist/types/{bandLevel.d.ts → dtos/BandLevel.d.ts} +0 -0
  29. /package/dist/types/dtos/{rsrScoreSourceDto.d.ts → RsrScoreSourceDto.d.ts} +0 -0
  30. /package/dist/types/{staticOrDynamic.d.ts → dtos/StaticOrDynamic.d.ts} +0 -0
@@ -1,25 +1,3 @@
1
- {#
2
- ARNS Predictor Badge Component
3
-
4
- Displays risk predictor score badges.
5
-
6
- Usage:
7
- In route handler:
8
- const riskData = await arnsComponents.getRiskData(token, 'crn', 'X123456')
9
- res.render('page', { riskData })
10
-
11
- In template:
12
- {% from "components/badge/macro.njk" import predictorBadge %}
13
- {{ predictorBadge({ data: riskData }) }}
14
-
15
- With options:
16
- {{ predictorBadge({ data: riskData, showScore: true }) }}
17
-
18
- @param {object} params
19
- @param {RiskData} params.data - Risk data from ArnsComponents.getRiskData()
20
- @param {boolean} [params.showScore=false] - Whether to display the percentage score
21
- @param {string} [params.classes] - Additional CSS classes
22
- #}
23
1
  {% macro predictorBadge(params) %}
24
2
  {%- include "./template.njk" -%}
25
3
  {% endmacro %}
@@ -1,59 +1,62 @@
1
1
  {#
2
2
  ARNS Predictor Badge Component
3
3
 
4
- Displays risk predictor score badges.
4
+ @name predictorBadge
5
5
 
6
- Usage:
7
- In route handler:
8
- const riskData = await arnsComponents.getRiskData(token, 'crn', 'X123456')
9
- res.render('page', { riskData })
6
+ @description Displays specified risk predictor score badges.
7
+ It uses the latest assessment from the provided data set.
10
8
 
11
- In template:
12
- {% from "components/badge/macro.njk" import predictorBadge %}
13
- {{ predictorBadge({ data: riskData }) }}
9
+ @example
10
+ In route handler:
11
+ const riskData = await arnsComponents.getRiskData(token, 'crn', 'X123456')
12
+ res.render('page', { riskData })
14
13
 
15
- With options:
16
- {{ predictorBadge({ data: riskData, showScore: true }) }}
14
+ In template:
15
+ {% from "components/badge/macro.njk" import predictorBadge %}
16
+ {{ predictorBadge({
17
+ data: riskData,
18
+ predictor: "allReoffendingPredictor",
19
+ showScore: true,
20
+ classes: "class-name-here"
21
+ }) }}
17
22
 
18
23
  @param {object} params
19
- @param {RiskData} params.data - Risk data from ArnsComponents.getRiskData()
20
- @param {boolean} [params.showScore=false] - Whether to display the percentage score
21
- @param {string} [params.classes] - Additional CSS classes
24
+ @param {RiskData} params.data - Risk data object from ArnsComponents.getRiskData() containing an 'assessments' array
25
+ @param {string} params.predictor - The name of the specific predictor to display
26
+ @param {boolean} [params.showScore=false] - If true, displays the percentage score
27
+ @param {string} [params.classes] - Optional CSS utility classes to apply to the container
22
28
  #}
23
-
24
- {% set badges = params.data.badges if params.data else [] %}
29
+ {% set latestAssessment = params.data.assessments | first if params.data.assessments else null %}
25
30
  {% set showScore = params.showScore if params.showScore else false %}
26
31
 
27
- {% if badges and badges.length %}
28
- <div class="predictor-badges{% if params.classes %} {{ params.classes }}{% endif %}">
29
- {% for entry in badges %}
30
- {% for key, predictor in entry %}
31
- {% if predictor %}
32
+ {% if latestAssessment is defined %}
33
+ <div class="predictor-badges{% if params.classes %} {{ params.classes }}{% endif %}">
34
+ {% for key, predictor in latestAssessment %}
35
+ {% if key == params.predictor %}
36
+
32
37
  {% set badgeClass = '' %}
33
- {% switch predictor.level %}
34
- {% case 'VERY_HIGH' %}
35
- {% set badgeClass = 'predictor-badge--very-high' %}
36
- {% case 'HIGH' %}
37
- {% set badgeClass = 'predictor-badge--high' %}
38
- {% case 'MEDIUM' %}
39
- {% set badgeClass = 'predictor-badge--medium' %}
40
- {% case 'LOW' %}
41
- {% set badgeClass = 'predictor-badge--low' %}
38
+ {% switch predictor.band %}
39
+ {% case 'VERY HIGH' %}
40
+ {% set badgeClass = 'predictor-badge--very-high' %}
41
+ {% case 'HIGH' %}
42
+ {% set badgeClass = 'predictor-badge--high' %}
43
+ {% case 'MEDIUM' %}
44
+ {% set badgeClass = 'predictor-badge--medium' %}
45
+ {% case 'LOW' %}
46
+ {% set badgeClass = 'predictor-badge--low' %}
42
47
  {% endswitch %}
43
-
44
48
  <div class="{{ badgeClass }}">
45
- <span class="predictor-badge__type_and_level">{{ predictor.type | upper }} <strong>{{ predictor.level | replace('_', ' ') }}</strong></span>
49
+ <span class="predictor-badge__type_and_level">{{ predictor.name | upper }} <strong>{{ predictor.band }}</strong></span>
46
50
 
47
- {% if showScore and predictor.score %}
51
+ {% if showScore and predictor.score is defined %}
48
52
  <span class="predictor-badge__score">{{ predictor.score }}%</span>
49
53
  {% endif %}
50
54
 
51
55
  {% if predictor.staticOrDynamic %}
52
- <span class="predictor-badge__static_or_dynamic">{{ predictor.staticOrDynamic | capitalize }}</span>
56
+ <span class="predictor-badge__static_or_dynamic">{{ predictor.staticOrDynamic }}</span>
53
57
  {% endif %}
54
58
  </div>
55
59
  {% endif %}
56
60
  {% endfor %}
57
- {% endfor %}
58
- </div>
61
+ </div>
59
62
  {% endif %}
package/dist/index.cjs.js CHANGED
@@ -2,172 +2,63 @@
2
2
 
3
3
  var hmppsRestClient = require('@ministryofjustice/hmpps-rest-client');
4
4
 
5
- function transformBadgeData(dto) {
6
- const badgeEntries = [];
7
- dto.forEach(listEntry => {
8
- if (listEntry.outputVersion === '1') {
9
- const ogrs3 = listEntry.output.groupReconvictionScore;
10
- const ovp = listEntry.output.violencePredictorScore;
11
- const ogp = listEntry.output.generalPredictorScore;
12
- const rsr = listEntry.output.riskOfSeriousRecidivismScore;
13
- const osp = listEntry.output.sexualPredictorScore;
14
- if (ogrs3) {
15
- const entry = {
16
- ogrs3PredictorScore: {
17
- level: ogrs3.scoreLevel,
18
- score: ogrs3.twoYears,
19
- type: 'OGRS3',
20
- staticOrDynamic: null,
21
- completedDate: listEntry.completedDate.toString(),
22
- },
23
- };
24
- badgeEntries.push(entry);
25
- }
26
- if (ovp) {
27
- const entry = {
28
- ovpPredictorScore: {
29
- level: ovp.ovpRisk,
30
- score: ovp.twoYears,
31
- type: 'OVP',
32
- staticOrDynamic: null,
33
- completedDate: listEntry.completedDate.toString(),
34
- },
35
- };
36
- badgeEntries.push(entry);
37
- }
38
- if (ogp) {
39
- const entry = {
40
- ogpPredictorScore: {
41
- level: ogp.ogpRisk,
42
- score: ogp.ogp2Year,
43
- type: 'OGP',
44
- staticOrDynamic: null,
45
- completedDate: listEntry.completedDate.toString(),
46
- },
47
- };
48
- badgeEntries.push(entry);
49
- }
50
- if (rsr) {
51
- const entry = {
52
- rsrPredictorScore: {
53
- level: rsr.scoreLevel,
54
- score: rsr.percentageScore,
55
- type: 'RSR',
56
- staticOrDynamic: rsr.staticOrDynamic,
57
- completedDate: listEntry.completedDate.toString(),
58
- },
59
- };
60
- badgeEntries.push(entry);
61
- }
62
- if (osp) {
63
- const entry = {
64
- ospdcPredictorScore: {
65
- level: osp.ospIndecentScoreLevel,
66
- score: osp.ospIndecentPercentageScore,
67
- type: 'OSP/DC',
68
- staticOrDynamic: null,
69
- completedDate: listEntry.completedDate.toString(),
70
- },
71
- };
72
- badgeEntries.push(entry);
73
- }
74
- if (osp) {
75
- const entry = {
76
- ospiicPredictorScore: {
77
- level: osp.ospIndecentScoreLevel,
78
- score: osp.ospIndecentPercentageScore,
79
- type: 'OSP/IIC',
80
- staticOrDynamic: null,
81
- completedDate: listEntry.completedDate.toString(),
82
- },
83
- };
84
- badgeEntries.push(entry);
85
- }
5
+ function transformAllPredictorVersionedDtoToAssessments(dtos) {
6
+ // Sort DTOs by datetime (newest first)
7
+ const sortedDtos = [...dtos].sort((a, b) => {
8
+ return new Date(b.completedDate).getTime() - new Date(a.completedDate).getTime();
9
+ });
10
+ return sortedDtos.map(dto => {
11
+ const completedDate = dto.completedDate.toString();
12
+ const date = new Date(completedDate);
13
+ const dateFormatDayMonthYear = new Intl.DateTimeFormat('en-GB', {
14
+ day: '2-digit',
15
+ month: 'long',
16
+ year: 'numeric',
17
+ }).format(date);
18
+ const time = date.toLocaleTimeString('en-GB', {
19
+ hour: '2-digit',
20
+ minute: '2-digit',
21
+ hour12: false,
22
+ });
23
+ const dateFormatDayMonthYearTime = `${dateFormatDayMonthYear} at ${time}`;
24
+ const { output } = dto;
25
+ if (dto.outputVersion === '1') {
26
+ return {
27
+ outputVersion: '1',
28
+ completedDateTime: dateFormatDayMonthYearTime,
29
+ ogrs3: mapPredictor('OGRS', output.groupReconvictionScore.scoreLevel, null, output.groupReconvictionScore.twoYears, dateFormatDayMonthYear),
30
+ ovp: mapPredictor('OVP', output.violencePredictorScore.ovpRisk, null, output.violencePredictorScore.twoYears, dateFormatDayMonthYear),
31
+ ogp: mapPredictor('OGP', output.generalPredictorScore.ogpRisk, null, output.generalPredictorScore.ogp2Year, dateFormatDayMonthYear),
32
+ rsr: mapPredictor('RSR', output.riskOfSeriousRecidivismScore.scoreLevel, output.riskOfSeriousRecidivismScore.staticOrDynamic, output.riskOfSeriousRecidivismScore.percentageScore, dateFormatDayMonthYear),
33
+ ospdc: mapPredictor('OSP-DC', output.sexualPredictorScore.ospContactScoreLevel, null, output.sexualPredictorScore.ospContactPercentageScore, dateFormatDayMonthYear),
34
+ ospiic: mapPredictor('OSP-IIC', output.sexualPredictorScore.ospIndecentScoreLevel, null, output.sexualPredictorScore.ospIndecentPercentageScore, dateFormatDayMonthYear),
35
+ };
86
36
  }
87
- else if (listEntry.outputVersion === '2') {
88
- const ogrs4 = listEntry.output.allReoffendingPredictor;
89
- const ovp2 = listEntry.output.violentReoffendingPredictor;
90
- const snsv = listEntry.output.seriousViolentReoffendingPredictor;
91
- const ospdc = listEntry.output.directContactSexualReoffendingPredictor;
92
- const ospiic = listEntry.output.indirectImageContactSexualReoffendingPredictor;
93
- const rsr = listEntry.output.combinedSeriousReoffendingPredictor;
94
- if (ogrs4) {
95
- const entry = {
96
- allReoffendingPredictor: {
97
- level: ogrs4.band,
98
- score: ogrs4.score,
99
- type: 'All reoffending predictor',
100
- staticOrDynamic: ogrs4.staticOrDynamic,
101
- completedDate: listEntry.completedDate.toString(),
102
- },
103
- };
104
- badgeEntries.push(entry);
105
- }
106
- if (ovp2) {
107
- const entry = {
108
- violentReoffendingPredictor: {
109
- level: ovp2.band,
110
- score: ovp2.score,
111
- type: 'Violent reoffending predictor',
112
- staticOrDynamic: ovp2.staticOrDynamic,
113
- completedDate: listEntry.completedDate.toString(),
114
- },
115
- };
116
- badgeEntries.push(entry);
117
- }
118
- if (snsv) {
119
- const entry = {
120
- seriousViolentReoffendingPredictor: {
121
- level: snsv.band,
122
- score: snsv.score,
123
- type: 'Serious violent reoffending predictor',
124
- staticOrDynamic: snsv.staticOrDynamic,
125
- completedDate: listEntry.completedDate.toString(),
126
- },
127
- };
128
- badgeEntries.push(entry);
129
- }
130
- if (ospdc) {
131
- const entry = {
132
- directContactSexualReoffendingPredictor: {
133
- level: ospdc.band,
134
- score: ospdc.score,
135
- type: 'Direct contact sexual reoffending predictor',
136
- staticOrDynamic: null,
137
- completedDate: listEntry.completedDate.toString(),
138
- },
139
- };
140
- badgeEntries.push(entry);
141
- }
142
- if (ospiic) {
143
- const entry = {
144
- indirectImageContactSexualReoffendingPredictor: {
145
- level: ospiic.band,
146
- score: ospiic.score,
147
- type: 'Indirect image contact sexual reoffending predictor',
148
- staticOrDynamic: null,
149
- completedDate: listEntry.completedDate.toString(),
150
- },
151
- };
152
- badgeEntries.push(entry);
153
- }
154
- if (rsr) {
155
- const entry = {
156
- combinedSeriousReoffendingPredictor: {
157
- level: rsr.band,
158
- score: rsr.score,
159
- type: 'Combined serious reoffending predictor',
160
- staticOrDynamic: rsr.staticOrDynamic,
161
- completedDate: listEntry.completedDate.toString(),
162
- },
163
- };
164
- badgeEntries.push(entry);
165
- }
37
+ if (dto.outputVersion === '2') {
38
+ return {
39
+ outputVersion: '2',
40
+ completedDateTime: dateFormatDayMonthYearTime,
41
+ allReoffendingPredictor: mapPredictor('All Reoffending Predictor', output.allReoffendingPredictor.band, output.allReoffendingPredictor.staticOrDynamic, output.allReoffendingPredictor.score, dateFormatDayMonthYear),
42
+ violentReoffendingPredictor: mapPredictor('Violent Reoffending Predictor', output.violentReoffendingPredictor.band, output.violentReoffendingPredictor.staticOrDynamic, output.violentReoffendingPredictor.score, dateFormatDayMonthYear),
43
+ seriousViolentReoffendingPredictor: mapPredictor('Serious Violent Reoffending Predictor', output.seriousViolentReoffendingPredictor.band, output.seriousViolentReoffendingPredictor.staticOrDynamic, output.seriousViolentReoffendingPredictor.score, dateFormatDayMonthYear),
44
+ directContactSexualReoffendingPredictor: mapPredictor('Direct Contact - Sexual Reoffending Predictor', output.directContactSexualReoffendingPredictor.band, null, output.directContactSexualReoffendingPredictor.score, dateFormatDayMonthYear),
45
+ indirectImageContactSexualReoffendingPredictor: mapPredictor('Images and Indirect Contact – Sexual Reoffending Predictor', output.indirectImageContactSexualReoffendingPredictor.band, null, output.indirectImageContactSexualReoffendingPredictor.score, dateFormatDayMonthYear),
46
+ combinedSeriousReoffendingPredictor: mapPredictor('Combined Serious Reoffending Predictor', output.combinedSeriousReoffendingPredictor.band, output.combinedSeriousReoffendingPredictor.staticOrDynamic, output.combinedSeriousReoffendingPredictor.score, dateFormatDayMonthYear),
47
+ };
166
48
  }
167
- else
168
- throw new Error('unexpected version');
49
+ throw new Error(`Unsupported output version: ${dto.outputVersion}`);
169
50
  });
170
- return badgeEntries;
51
+ }
52
+ function mapPredictor(name, band, staticOrDynamic, score, date) {
53
+ return {
54
+ name,
55
+ band: band.replace(/_/g, ' ').toUpperCase(),
56
+ staticOrDynamic: staticOrDynamic
57
+ ? staticOrDynamic.charAt(0).toUpperCase() + staticOrDynamic.slice(1).toLowerCase()
58
+ : null,
59
+ score,
60
+ completedDate: date,
61
+ };
171
62
  }
172
63
 
173
64
  class ArnsComponents {
@@ -177,8 +68,7 @@ class ArnsComponents {
177
68
  async getRiskData(authOptions, identifierType, identifierValue) {
178
69
  const response = await this.restClient.get({ path: `/risks/predictors/all/${identifierType}/${identifierValue}` }, authOptions);
179
70
  return {
180
- badges: transformBadgeData(response),
181
- raw: response,
71
+ assessments: transformAllPredictorVersionedDtoToAssessments(response),
182
72
  };
183
73
  }
184
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/components/badge/transformation.ts","../src/ArnsComponents.ts"],"sourcesContent":[null,null],"names":["RestClient"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/transformers/AllPredictorVersionedDtoToAssessmentsTransformer.ts","../src/ArnsComponents.ts"],"sourcesContent":[null,null],"names":["RestClient"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,115 +5,40 @@ import Logger from 'bunyan';
5
5
  interface ArnsComponentsConfig extends ApiConfig {
6
6
  }
7
7
 
8
- declare enum StaticOrDynamic {
9
- STATIC = "STATIC",
10
- DYNAMIC = "DYNAMIC"
11
- }
12
-
13
- declare enum BandLevel {
14
- LOW = "LOW",
15
- MEDIUM = "MEDIUM",
16
- HIGH = "HIGH",
17
- VERY_HIGH = "VERY_HIGH",
18
- NOT_APPLICABLE = "NOT_APPLICABLE"
19
- }
20
-
21
- interface BadgeData {
22
- level: `${BandLevel}`;
23
- score: number;
24
- type: string;
25
- staticOrDynamic: `${StaticOrDynamic}`;
8
+ interface Predictor {
9
+ name: string;
10
+ band: string;
11
+ staticOrDynamic?: string;
12
+ score?: number;
26
13
  completedDate: string;
27
14
  }
28
- interface BadgeEntry {
29
- [key: string]: BadgeData;
30
- }
31
-
32
- declare enum AssessmentStatusDto {
33
- COMPLETE = "COMPLETE",
34
- LOCKED_INCOMPLETE = "LOCKED_INCOMPLETE"
35
- }
36
-
37
- interface BasePredictorDto {
38
- score: number;
39
- band: `${BandLevel}`;
40
- }
41
-
42
- interface StaticOrDynamicPredictorDto extends BasePredictorDto {
43
- staticOrDynamic: `${StaticOrDynamic}`;
44
- }
45
-
46
- interface VersionedStaticOrDynamicPredictorDto extends StaticOrDynamicPredictorDto {
47
- algorithmVersion: string;
48
- }
49
15
 
50
- interface OgrScoreDto {
51
- oneYear: number;
52
- twoYears: number;
53
- scoreLevel: `${BandLevel}`;
16
+ interface AssessmentV1 {
17
+ outputVersion: '1';
18
+ completedDateTime: string;
19
+ ogrs3?: Predictor;
20
+ ovp?: Predictor;
21
+ ogp?: Predictor;
22
+ rsr: Predictor;
23
+ ospdc: Predictor;
24
+ ospiic: Predictor;
54
25
  }
55
26
 
56
- interface OvpScoreDto {
57
- ovpStaticWeightedScore: number;
58
- ovpDynamicWeightedScore: number;
59
- ovpTotalWeightedScore: number;
60
- oneYear: number;
61
- twoYears: number;
62
- ovpRisk: `${BandLevel}`;
27
+ interface AssessmentV2 {
28
+ outputVersion: '2';
29
+ completedDateTime: string;
30
+ allReoffendingPredictor?: Predictor;
31
+ violentReoffendingPredictor?: Predictor;
32
+ seriousViolentReoffendingPredictor?: Predictor;
33
+ directContactSexualReoffendingPredictor?: Predictor;
34
+ indirectImageContactSexualReoffendingPredictor?: Predictor;
35
+ combinedSeriousReoffendingPredictor?: Predictor;
63
36
  }
64
37
 
65
- interface OgpScoreDto {
66
- ogpStaticWeightedScore: number;
67
- ogpDynamicWeightedScore: number;
68
- ogpTotalWeightedScore: number;
69
- ogp1Year: number;
70
- ogp2Year: number;
71
- ogpRisk: `${BandLevel}`;
72
- }
73
-
74
- declare enum RsrScoreSourceDto {
75
- OASYS = "OASYS"
76
- }
77
-
78
- interface RsrScoreDto {
79
- percentageScore: number;
80
- staticOrDynamic: `${StaticOrDynamic}`;
81
- source: `${RsrScoreSourceDto}`;
82
- algorithmVersion: string;
83
- scoreLevel: `${BandLevel}`;
84
- }
85
-
86
- interface OspScoreDto {
87
- ospIndecentPercentageScore: number;
88
- ospContactPercentageScore: number;
89
- ospIndecentScoreLevel: `${BandLevel}`;
90
- ospContactScoreLevel: `${BandLevel}`;
91
- }
92
-
93
- interface AllPredictorDto {
94
- allReoffendingPredictor?: StaticOrDynamicPredictorDto;
95
- violentReoffendingPredictor?: StaticOrDynamicPredictorDto;
96
- seriousViolentReoffendingPredictor?: StaticOrDynamicPredictorDto;
97
- directContactSexualReoffendingPredictor?: BasePredictorDto;
98
- indirectImageContactSexualReoffendingPredictor?: BasePredictorDto;
99
- combinedSeriousReoffendingPredictor?: VersionedStaticOrDynamicPredictorDto;
100
- groupReconvictionScore?: OgrScoreDto;
101
- violencePredictorScore?: OvpScoreDto;
102
- generalPredictorScore?: OgpScoreDto;
103
- riskOfSeriousRecidivismScore?: RsrScoreDto;
104
- sexualPredictorScore?: OspScoreDto;
105
- }
106
-
107
- interface AllPredictorVersionedDto {
108
- completedDate: string;
109
- status: `${AssessmentStatusDto}`;
110
- outputVersion: string;
111
- output?: AllPredictorDto;
112
- }
38
+ type Assessments = AssessmentV1 | AssessmentV2;
113
39
 
114
40
  interface RiskData {
115
- badges: BadgeEntry[];
116
- raw: AllPredictorVersionedDto[];
41
+ assessments: Assessments[];
117
42
  }
118
43
 
119
44
  declare class ArnsComponents {
@@ -123,4 +48,4 @@ declare class ArnsComponents {
123
48
  }
124
49
 
125
50
  export { ArnsComponents };
126
- export type { ArnsComponentsConfig, BadgeData, BadgeEntry, RiskData };
51
+ export type { ArnsComponentsConfig, Assessments, RiskData };
package/dist/index.esm.js CHANGED
@@ -1,171 +1,62 @@
1
1
  import { RestClient } from '@ministryofjustice/hmpps-rest-client';
2
2
 
3
- function transformBadgeData(dto) {
4
- const badgeEntries = [];
5
- dto.forEach(listEntry => {
6
- if (listEntry.outputVersion === '1') {
7
- const ogrs3 = listEntry.output.groupReconvictionScore;
8
- const ovp = listEntry.output.violencePredictorScore;
9
- const ogp = listEntry.output.generalPredictorScore;
10
- const rsr = listEntry.output.riskOfSeriousRecidivismScore;
11
- const osp = listEntry.output.sexualPredictorScore;
12
- if (ogrs3) {
13
- const entry = {
14
- ogrs3PredictorScore: {
15
- level: ogrs3.scoreLevel,
16
- score: ogrs3.twoYears,
17
- type: 'OGRS3',
18
- staticOrDynamic: null,
19
- completedDate: listEntry.completedDate.toString(),
20
- },
21
- };
22
- badgeEntries.push(entry);
23
- }
24
- if (ovp) {
25
- const entry = {
26
- ovpPredictorScore: {
27
- level: ovp.ovpRisk,
28
- score: ovp.twoYears,
29
- type: 'OVP',
30
- staticOrDynamic: null,
31
- completedDate: listEntry.completedDate.toString(),
32
- },
33
- };
34
- badgeEntries.push(entry);
35
- }
36
- if (ogp) {
37
- const entry = {
38
- ogpPredictorScore: {
39
- level: ogp.ogpRisk,
40
- score: ogp.ogp2Year,
41
- type: 'OGP',
42
- staticOrDynamic: null,
43
- completedDate: listEntry.completedDate.toString(),
44
- },
45
- };
46
- badgeEntries.push(entry);
47
- }
48
- if (rsr) {
49
- const entry = {
50
- rsrPredictorScore: {
51
- level: rsr.scoreLevel,
52
- score: rsr.percentageScore,
53
- type: 'RSR',
54
- staticOrDynamic: rsr.staticOrDynamic,
55
- completedDate: listEntry.completedDate.toString(),
56
- },
57
- };
58
- badgeEntries.push(entry);
59
- }
60
- if (osp) {
61
- const entry = {
62
- ospdcPredictorScore: {
63
- level: osp.ospIndecentScoreLevel,
64
- score: osp.ospIndecentPercentageScore,
65
- type: 'OSP/DC',
66
- staticOrDynamic: null,
67
- completedDate: listEntry.completedDate.toString(),
68
- },
69
- };
70
- badgeEntries.push(entry);
71
- }
72
- if (osp) {
73
- const entry = {
74
- ospiicPredictorScore: {
75
- level: osp.ospIndecentScoreLevel,
76
- score: osp.ospIndecentPercentageScore,
77
- type: 'OSP/IIC',
78
- staticOrDynamic: null,
79
- completedDate: listEntry.completedDate.toString(),
80
- },
81
- };
82
- badgeEntries.push(entry);
83
- }
3
+ function transformAllPredictorVersionedDtoToAssessments(dtos) {
4
+ // Sort DTOs by datetime (newest first)
5
+ const sortedDtos = [...dtos].sort((a, b) => {
6
+ return new Date(b.completedDate).getTime() - new Date(a.completedDate).getTime();
7
+ });
8
+ return sortedDtos.map(dto => {
9
+ const completedDate = dto.completedDate.toString();
10
+ const date = new Date(completedDate);
11
+ const dateFormatDayMonthYear = new Intl.DateTimeFormat('en-GB', {
12
+ day: '2-digit',
13
+ month: 'long',
14
+ year: 'numeric',
15
+ }).format(date);
16
+ const time = date.toLocaleTimeString('en-GB', {
17
+ hour: '2-digit',
18
+ minute: '2-digit',
19
+ hour12: false,
20
+ });
21
+ const dateFormatDayMonthYearTime = `${dateFormatDayMonthYear} at ${time}`;
22
+ const { output } = dto;
23
+ if (dto.outputVersion === '1') {
24
+ return {
25
+ outputVersion: '1',
26
+ completedDateTime: dateFormatDayMonthYearTime,
27
+ ogrs3: mapPredictor('OGRS', output.groupReconvictionScore.scoreLevel, null, output.groupReconvictionScore.twoYears, dateFormatDayMonthYear),
28
+ ovp: mapPredictor('OVP', output.violencePredictorScore.ovpRisk, null, output.violencePredictorScore.twoYears, dateFormatDayMonthYear),
29
+ ogp: mapPredictor('OGP', output.generalPredictorScore.ogpRisk, null, output.generalPredictorScore.ogp2Year, dateFormatDayMonthYear),
30
+ rsr: mapPredictor('RSR', output.riskOfSeriousRecidivismScore.scoreLevel, output.riskOfSeriousRecidivismScore.staticOrDynamic, output.riskOfSeriousRecidivismScore.percentageScore, dateFormatDayMonthYear),
31
+ ospdc: mapPredictor('OSP-DC', output.sexualPredictorScore.ospContactScoreLevel, null, output.sexualPredictorScore.ospContactPercentageScore, dateFormatDayMonthYear),
32
+ ospiic: mapPredictor('OSP-IIC', output.sexualPredictorScore.ospIndecentScoreLevel, null, output.sexualPredictorScore.ospIndecentPercentageScore, dateFormatDayMonthYear),
33
+ };
84
34
  }
85
- else if (listEntry.outputVersion === '2') {
86
- const ogrs4 = listEntry.output.allReoffendingPredictor;
87
- const ovp2 = listEntry.output.violentReoffendingPredictor;
88
- const snsv = listEntry.output.seriousViolentReoffendingPredictor;
89
- const ospdc = listEntry.output.directContactSexualReoffendingPredictor;
90
- const ospiic = listEntry.output.indirectImageContactSexualReoffendingPredictor;
91
- const rsr = listEntry.output.combinedSeriousReoffendingPredictor;
92
- if (ogrs4) {
93
- const entry = {
94
- allReoffendingPredictor: {
95
- level: ogrs4.band,
96
- score: ogrs4.score,
97
- type: 'All reoffending predictor',
98
- staticOrDynamic: ogrs4.staticOrDynamic,
99
- completedDate: listEntry.completedDate.toString(),
100
- },
101
- };
102
- badgeEntries.push(entry);
103
- }
104
- if (ovp2) {
105
- const entry = {
106
- violentReoffendingPredictor: {
107
- level: ovp2.band,
108
- score: ovp2.score,
109
- type: 'Violent reoffending predictor',
110
- staticOrDynamic: ovp2.staticOrDynamic,
111
- completedDate: listEntry.completedDate.toString(),
112
- },
113
- };
114
- badgeEntries.push(entry);
115
- }
116
- if (snsv) {
117
- const entry = {
118
- seriousViolentReoffendingPredictor: {
119
- level: snsv.band,
120
- score: snsv.score,
121
- type: 'Serious violent reoffending predictor',
122
- staticOrDynamic: snsv.staticOrDynamic,
123
- completedDate: listEntry.completedDate.toString(),
124
- },
125
- };
126
- badgeEntries.push(entry);
127
- }
128
- if (ospdc) {
129
- const entry = {
130
- directContactSexualReoffendingPredictor: {
131
- level: ospdc.band,
132
- score: ospdc.score,
133
- type: 'Direct contact sexual reoffending predictor',
134
- staticOrDynamic: null,
135
- completedDate: listEntry.completedDate.toString(),
136
- },
137
- };
138
- badgeEntries.push(entry);
139
- }
140
- if (ospiic) {
141
- const entry = {
142
- indirectImageContactSexualReoffendingPredictor: {
143
- level: ospiic.band,
144
- score: ospiic.score,
145
- type: 'Indirect image contact sexual reoffending predictor',
146
- staticOrDynamic: null,
147
- completedDate: listEntry.completedDate.toString(),
148
- },
149
- };
150
- badgeEntries.push(entry);
151
- }
152
- if (rsr) {
153
- const entry = {
154
- combinedSeriousReoffendingPredictor: {
155
- level: rsr.band,
156
- score: rsr.score,
157
- type: 'Combined serious reoffending predictor',
158
- staticOrDynamic: rsr.staticOrDynamic,
159
- completedDate: listEntry.completedDate.toString(),
160
- },
161
- };
162
- badgeEntries.push(entry);
163
- }
35
+ if (dto.outputVersion === '2') {
36
+ return {
37
+ outputVersion: '2',
38
+ completedDateTime: dateFormatDayMonthYearTime,
39
+ allReoffendingPredictor: mapPredictor('All Reoffending Predictor', output.allReoffendingPredictor.band, output.allReoffendingPredictor.staticOrDynamic, output.allReoffendingPredictor.score, dateFormatDayMonthYear),
40
+ violentReoffendingPredictor: mapPredictor('Violent Reoffending Predictor', output.violentReoffendingPredictor.band, output.violentReoffendingPredictor.staticOrDynamic, output.violentReoffendingPredictor.score, dateFormatDayMonthYear),
41
+ seriousViolentReoffendingPredictor: mapPredictor('Serious Violent Reoffending Predictor', output.seriousViolentReoffendingPredictor.band, output.seriousViolentReoffendingPredictor.staticOrDynamic, output.seriousViolentReoffendingPredictor.score, dateFormatDayMonthYear),
42
+ directContactSexualReoffendingPredictor: mapPredictor('Direct Contact - Sexual Reoffending Predictor', output.directContactSexualReoffendingPredictor.band, null, output.directContactSexualReoffendingPredictor.score, dateFormatDayMonthYear),
43
+ indirectImageContactSexualReoffendingPredictor: mapPredictor('Images and Indirect Contact – Sexual Reoffending Predictor', output.indirectImageContactSexualReoffendingPredictor.band, null, output.indirectImageContactSexualReoffendingPredictor.score, dateFormatDayMonthYear),
44
+ combinedSeriousReoffendingPredictor: mapPredictor('Combined Serious Reoffending Predictor', output.combinedSeriousReoffendingPredictor.band, output.combinedSeriousReoffendingPredictor.staticOrDynamic, output.combinedSeriousReoffendingPredictor.score, dateFormatDayMonthYear),
45
+ };
164
46
  }
165
- else
166
- throw new Error('unexpected version');
47
+ throw new Error(`Unsupported output version: ${dto.outputVersion}`);
167
48
  });
168
- return badgeEntries;
49
+ }
50
+ function mapPredictor(name, band, staticOrDynamic, score, date) {
51
+ return {
52
+ name,
53
+ band: band.replace(/_/g, ' ').toUpperCase(),
54
+ staticOrDynamic: staticOrDynamic
55
+ ? staticOrDynamic.charAt(0).toUpperCase() + staticOrDynamic.slice(1).toLowerCase()
56
+ : null,
57
+ score,
58
+ completedDate: date,
59
+ };
169
60
  }
170
61
 
171
62
  class ArnsComponents {
@@ -175,8 +66,7 @@ class ArnsComponents {
175
66
  async getRiskData(authOptions, identifierType, identifierValue) {
176
67
  const response = await this.restClient.get({ path: `/risks/predictors/all/${identifierType}/${identifierValue}` }, authOptions);
177
68
  return {
178
- badges: transformBadgeData(response),
179
- raw: response,
69
+ assessments: transformAllPredictorVersionedDtoToAssessments(response),
180
70
  };
181
71
  }
182
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/components/badge/transformation.ts","../src/ArnsComponents.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/transformers/AllPredictorVersionedDtoToAssessmentsTransformer.ts","../src/ArnsComponents.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { AllPredictorVersionedDto } from '../types/dtos/AllPredictorVersionedDto';
2
+ import { Assessments } from '../types/Assessments';
3
+ export declare function transformAllPredictorVersionedDtoToAssessments(dtos: AllPredictorVersionedDto[]): Assessments[];
@@ -0,0 +1,11 @@
1
+ import { Predictor } from './Predictor';
2
+ export interface AssessmentV1 {
3
+ outputVersion: '1';
4
+ completedDateTime: string;
5
+ ogrs3?: Predictor;
6
+ ovp?: Predictor;
7
+ ogp?: Predictor;
8
+ rsr: Predictor;
9
+ ospdc: Predictor;
10
+ ospiic: Predictor;
11
+ }
@@ -0,0 +1,11 @@
1
+ import { Predictor } from './Predictor';
2
+ export interface AssessmentV2 {
3
+ outputVersion: '2';
4
+ completedDateTime: string;
5
+ allReoffendingPredictor?: Predictor;
6
+ violentReoffendingPredictor?: Predictor;
7
+ seriousViolentReoffendingPredictor?: Predictor;
8
+ directContactSexualReoffendingPredictor?: Predictor;
9
+ indirectImageContactSexualReoffendingPredictor?: Predictor;
10
+ combinedSeriousReoffendingPredictor?: Predictor;
11
+ }
@@ -0,0 +1,3 @@
1
+ import { AssessmentV1 } from './AssessmentV1';
2
+ import { AssessmentV2 } from './AssessmentV2';
3
+ export type Assessments = AssessmentV1 | AssessmentV2;
@@ -0,0 +1,7 @@
1
+ export interface Predictor {
2
+ name: string;
3
+ band: string;
4
+ staticOrDynamic?: string;
5
+ score?: number;
6
+ completedDate: string;
7
+ }
@@ -1,6 +1,4 @@
1
- import { BadgeEntry } from './badgeData';
2
- import { AllPredictorVersionedDto } from './dtos/allPredictorVersionedDto';
1
+ import { Assessments } from './Assessments';
3
2
  export interface RiskData {
4
- badges: BadgeEntry[];
5
- raw: AllPredictorVersionedDto[];
3
+ assessments: Assessments[];
6
4
  }
@@ -1,11 +1,11 @@
1
- import { BasePredictorDto } from './basePredictorDto';
2
- import { StaticOrDynamicPredictorDto } from './staticOrDynamicPredictorDto';
3
- import { VersionedStaticOrDynamicPredictorDto } from './versionedStaticOrDynamicPredictorDto';
4
- import { OgrScoreDto } from './ogrScoreDto';
5
- import { OvpScoreDto } from './ovpScoreDto';
6
- import { OgpScoreDto } from './ogpScoreDto';
7
- import { RsrScoreDto } from './rsrScoreDto';
8
- import { OspScoreDto } from './ospScoreDto';
1
+ import { BasePredictorDto } from './BasePredictorDto';
2
+ import { StaticOrDynamicPredictorDto } from './StaticOrDynamicPredictorDto';
3
+ import { VersionedStaticOrDynamicPredictorDto } from './VersionedStaticOrDynamicPredictorDto';
4
+ import { OgrScoreDto } from './OgrScoreDto';
5
+ import { OvpScoreDto } from './OvpScoreDto';
6
+ import { OgpScoreDto } from './OgpScoreDto';
7
+ import { RsrScoreDto } from './RsrScoreDto';
8
+ import { OspScoreDto } from './OspScoreDto';
9
9
  export interface AllPredictorDto {
10
10
  allReoffendingPredictor?: StaticOrDynamicPredictorDto;
11
11
  violentReoffendingPredictor?: StaticOrDynamicPredictorDto;
@@ -1,5 +1,5 @@
1
- import { AssessmentStatusDto } from './assessmentStatusDto';
2
- import { AllPredictorDto } from './allPredictorDto';
1
+ import { AssessmentStatusDto } from './AssessmentStatusDto';
2
+ import { AllPredictorDto } from './AllPredictorDto';
3
3
  export interface AllPredictorVersionedDto {
4
4
  completedDate: string;
5
5
  status: `${AssessmentStatusDto}`;
@@ -1,4 +1,4 @@
1
- import { BandLevel } from '../bandLevel';
1
+ import { BandLevel } from './BandLevel';
2
2
  export interface BasePredictorDto {
3
3
  score: number;
4
4
  band: `${BandLevel}`;
@@ -1,4 +1,4 @@
1
- import { BandLevel } from '../bandLevel';
1
+ import { BandLevel } from './BandLevel';
2
2
  export interface OgpScoreDto {
3
3
  ogpStaticWeightedScore: number;
4
4
  ogpDynamicWeightedScore: number;
@@ -1,4 +1,4 @@
1
- import { BandLevel } from '../bandLevel';
1
+ import { BandLevel } from './BandLevel';
2
2
  export interface OgrScoreDto {
3
3
  oneYear: number;
4
4
  twoYears: number;
@@ -1,4 +1,4 @@
1
- import { BandLevel } from '../bandLevel';
1
+ import { BandLevel } from './BandLevel';
2
2
  export interface OspScoreDto {
3
3
  ospIndecentPercentageScore: number;
4
4
  ospContactPercentageScore: number;
@@ -1,4 +1,4 @@
1
- import { BandLevel } from '../bandLevel';
1
+ import { BandLevel } from './BandLevel';
2
2
  export interface OvpScoreDto {
3
3
  ovpStaticWeightedScore: number;
4
4
  ovpDynamicWeightedScore: number;
@@ -1,6 +1,6 @@
1
- import { StaticOrDynamic } from '../staticOrDynamic';
2
- import { BandLevel } from '../bandLevel';
3
- import { RsrScoreSourceDto } from './rsrScoreSourceDto';
1
+ import { StaticOrDynamic } from './StaticOrDynamic';
2
+ import { BandLevel } from './BandLevel';
3
+ import { RsrScoreSourceDto } from './RsrScoreSourceDto';
4
4
  export interface RsrScoreDto {
5
5
  percentageScore: number;
6
6
  staticOrDynamic: `${StaticOrDynamic}`;
@@ -1,5 +1,5 @@
1
- import { StaticOrDynamic } from '../staticOrDynamic';
2
- import { BasePredictorDto } from './basePredictorDto';
1
+ import { StaticOrDynamic } from './StaticOrDynamic';
2
+ import { BasePredictorDto } from './BasePredictorDto';
3
3
  export interface StaticOrDynamicPredictorDto extends BasePredictorDto {
4
4
  staticOrDynamic: `${StaticOrDynamic}`;
5
5
  }
@@ -1,4 +1,4 @@
1
- import { StaticOrDynamicPredictorDto } from './staticOrDynamicPredictorDto';
1
+ import { StaticOrDynamicPredictorDto } from './StaticOrDynamicPredictorDto';
2
2
  export interface VersionedStaticOrDynamicPredictorDto extends StaticOrDynamicPredictorDto {
3
3
  algorithmVersion: string;
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ministryofjustice/hmpps-arns-frontend-components-lib",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "ARNS front-end library for risk score visualisations",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.esm.js",
@@ -1,3 +0,0 @@
1
- import { AllPredictorVersionedDto } from '../../types/dtos/allPredictorVersionedDto';
2
- import { BadgeEntry } from '../../types/badgeData';
3
- export declare function transformBadgeData(dto: AllPredictorVersionedDto[]): BadgeEntry[];
@@ -1,12 +0,0 @@
1
- import { StaticOrDynamic } from './staticOrDynamic';
2
- import { BandLevel } from './bandLevel';
3
- export interface BadgeData {
4
- level: `${BandLevel}`;
5
- score: number;
6
- type: string;
7
- staticOrDynamic: `${StaticOrDynamic}`;
8
- completedDate: string;
9
- }
10
- export interface BadgeEntry {
11
- [key: string]: BadgeData;
12
- }